Ist es möglich, die Werte des letzten Monats von einem MySQL-Server zu extrahieren und aus diesen Werten eine neue Datenbank zu erstellen?

8

Ich habe die Aufgabe, eine Vorlage für eine virtuelle Entwicklungsmaschine zu erstellen.

Ich muss dem Server MySQL-Datenbanken von jedem Produkt meines Unternehmens hinzufügen, damit neue Entwickler die Möglichkeit haben, für jedes einzelne Produkt zu entwickeln.

Die meisten Datenbanken sind kleiner als 1 GB.

Ich habe jedoch einige riesige Datenbanken (ca. 160 GB) - aber die Größe der Vorlage, die ich erstellen möchte, ist begrenzt, und es ist nicht sinnvoll, dort eine Datenbank mit 160 GB hinzuzufügen.

Daher versuche ich, die richtige Methode zu finden, um beispielsweise die Werte des letzten Monats aus dieser riesigen Datenbank zu extrahieren und sie dem Server hinzuzufügen, damit der Entwickler "fühlen" kann, wie es ist, an dieser Datenbank zu arbeiten.

Ist es möglich so etwas zu machen und wie wird es gemacht? Vielen Dank!

Bearbeiten:

Leider gibt es keine Option für einen separaten Haupt-DB-Server, auf dem alle Entwicklungsdatenbanken gespeichert sind. Außerdem müssen die Daten nicht regelmäßig aktualisiert werden. Ich muss lediglich dieselben Daten wie auf Produktionsservern (zu einem zufälligen Zeitpunkt) als Sandbox-Umgebung für neue Entwickler.

Itai Ganot
quelle

Antworten:

8

Wenn ich das richtig verstanden habe, planen Sie, für jede Entwicklungsumgebung eine separate DB-Kopie zu erstellen.

Während dies mit kleinen Datenbanken möglich ist, funktioniert es mit großen DBs nicht so gut. Wenn Sie also keinen guten Grund haben, für jede Umgebung eine eigene Datenbank einzurichten, ist es möglicherweise besser, eine einzige Kopie der Entwicklungsdatenbank zu verwenden und alle Entwicklungsumgebungen für die Verwendung festzulegen.

Mit diesem Ansatz können Sie die Entwicklungsdatenbank regelmäßig mit den neuesten Daten aktualisieren. Wenn jemand sie durcheinander bringt, können Sie sie einfach erneut aktualisieren.

Stellen Sie sich auch die Situation vor, in der Ihre Entwickler an einem neuen Projekt arbeiten, für das neue Tabellen erstellt werden müssen. Wenn Sie eine einzelne Kopie der Entwicklungsdatenbank haben, müssen Sie (oder Entwickler) diese Tabellen erstellen und sie nur einmal mit Testdaten füllen. Stellen Sie sich nun vor, Entwickler erkennen, dass die anfängliche Tabellenstruktur nicht optimal ist und geändert werden muss. Auch dies muss in einer einzelnen Datenbank durchgeführt werden, im Gegensatz zu möglicherweise zehn Umgebungen.

Dies ist der Ansatz, den ich immer wieder für große Projekte gesehen habe und der meistens ziemlich gut funktioniert.

grekasius
quelle
2
In einem Geschäft, in dem ich arbeite, hat jeder Entwickler eine eigene Kopie der Datenbank, sodass niemand anderen Menschen auf die Zehen tritt. Das hat bei uns sehr gut geklappt. Wir haben Skripte, um die Datenbank von Grund auf neu zu erstellen und sie mit den für die Entwicklung erforderlichen Testdaten zu füllen. Eine einzelne Datenbank war oft problematisch, wenn Leute, die an einigen Datenbankbereichen arbeiten, sie für andere Leute brechen. Und dann halten alle an, während eine große Datenbank wiederhergestellt wird. Eine einzige Datenbank ist also KEINE überlegene Lösung. (TBH ist auch nicht. Es ist situativ.)
Andrew Savinykh
Einverstanden. Wie groß sind Ihre DBs aus Neugier? Ich kann nicht sehen, wie dies mit einer DB von 160 GB Größe funktionieren könnte.
Grekasius
Natürlich wären die Entwicklungsdatenbanken absichtlich klein, nur die Teilmenge der Daten wäre erforderlich, um zu testen, woran die Entwickler arbeiten. Für Zwecke wie Leistungstests würde eine separate (größere) Instanz verwendet.
Andrew Savinykh
Ich muss die Daten nicht regelmäßig aktualisieren, sondern nur einmal in diese Vorlage einfügen.
Itai Ganot
Schauen Sie nach, ob Sie aus Ihrer aktuellen Datenbank einen kleinen Beispieldatensatz erstellen können. Leider gibt es hier keine eindeutige Antwort. Was Sie tun müssen, hängt davon ab, über welche Daten Sie verfügen und was Sie in diese Entwicklungsdatenbank einfügen möchten.
Grekasius
4

Dies hängt stark von der Art der Daten in der Datenbank ab. In einigen Fällen kann es so einfach sein wie

select * from table where date > ....

In anderen Fällen ist es aufgrund der Struktur der Daten unmöglich, dies zu trennen. Am Ende wird es wahrscheinlich eine Mischung sein und sehr schwer, es richtig zu machen.

Sven
quelle
2
Insbesondere können einige Datenbanken neuere Einträge (z. B. <1 Monat) enthalten, die auf Datensätze älterer Einträge (z. B.> 1 Monat) verweisen. Die Art und Weise, wie Sie mit ihnen umgehen, hängt ganz davon ab, wie diese Referenzen eingerichtet sind, und ist für alle außer den grundlegendsten nicht durchführbar.
Bob
0

Wir hatten kürzlich die Situation, dass ein Kunde die letzten 30 Tage einer Datenbank extrahieren wollte. Wenn ALLE Tabellen dasselbe Attribut haben, in dem Sie die Datums- und Uhrzeitangabe definieren können, können Sie a

mysqldump --where = 'datetimefield> "2014-06-28"'

aber er wollte verschiedene Tabellen mit alten und neuen Daten mischen. Das war also keine Lösung für ihn, aber es könnte eine für Sie sein?

shinguz
quelle