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


Ich habe eine Aufgabe, eine Entwicklungsvorlage für virtuelle Maschinen zu erstellen.

Ich muss dem Server MySQL-Datenbanken von jedem Produkt meines Unternehmens hinzufügen, so dass neue Entwickler die Fähigkeit haben werden, für jedes der Produkte zu entwickeln.

Die meisten Datenbanken sind kleiner als 1 GB.

Aber ich habe ein paar Datenbanken, die riesig sind (etwa 160G) - aber ich bin in der Größe der Vorlage, die ich erstellen möchte, begrenzt, und es ist nicht sinnvoll, dort eine DB von 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, in dieser Datenbank zu arbeiten.

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

Bearbeiten:

Leider gibt es keine Option für einen separaten Haupt-DB-Server, der alle Entwicklungsdatenbanken enthalten wird. Es gibt auch keine Notwendigkeit, die Daten regelmäßig zu aktualisieren. Ich muss lediglich die gleichen Daten wie in Produktionsservern (zu einem zufälligen Zeitraum) präsentieren Sandbox-Umgebung für neue Entwickler.


8
2017-07-27 08:08


Ursprung




Antworten:


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

Während dies mit kleinen Datenbanken machbar ist, wird es bei großen DBs nicht so gut funktionieren. Wenn Sie also keinen wirklich guten Grund haben, eine separate Datenbank für jede Umgebung einzurichten, sollten Sie besser eine einzige Kopie der Entwicklungsdatenbank in Erwägung ziehen und alle Entwicklungsumgebungen darauf einstellen, sie zu verwenden.

Dieser Ansatz ermöglicht es Ihnen, die Entwicklungsdatenbank regelmäßig mit den neuesten Daten zu aktualisieren, und wenn jemand dies vermasselt, 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 einzige Kopie der Entwicklungsdatenbank haben, müssen Sie (oder Entwickler) diese Tabellen erstellen und sie nur einmal mit Testdaten füllen. Stellen Sie sich jetzt vor, Entwickler würden erkennen, dass die anfängliche Tabellenstruktur nicht optimal ist und geändert werden muss. Dies muss wiederum auf einer einzigen DB im Gegensatz zu möglicherweise mehreren Dutzend Umgebungen erfolgen.

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


8
2017-07-27 09:01



In einem Geschäft, in dem ich arbeite, hat jeder Entwickler seine eigene Kopie der Datenbank, so dass niemand auf andere Leute tritt. Das hat sehr gut für uns geklappt. Wir haben Skripte, um die Datenbank von Grund auf neu aufzubauen und sie mit den Testdaten zu füllen, die für die Entwicklung benötigt werden. Eine einzelne Datenbank war oft problematisch mit Leuten, die an einigen Datenbankbereichen arbeiteten und diese für andere Leute aufbrachen. Und dann halten alle an, während eine große db wiederhergestellt wird. Eine einzige Datenbank zu haben, ist KEINE bessere Lösung. (TBH ist es auch nicht. Es ist situationsbedingt.) - Andrew Savinykh
Einverstanden. Nur aus Neugier, wie groß sind deine DBs? Ich kann nicht sehen, wie dies mit einer DB von 160 GB Größe funktionieren könnte. - grekasius
Natürlich sind die Entwicklerdatenbanken absichtlich klein mit nur der Teilmenge von Daten, die benötigt werden, um zu testen, woran auch immer die Entwickler arbeiten. Für Zwecke wie Leistungstests würde eine separate (größere) Instanz verwendet werden. - Andrew Savinykh
Ich bin nicht verpflichtet, die Daten regelmäßig zu aktualisieren, nur um sie einmal in dieser Vorlage zu platzieren. - Itai Ganot
Sehen Sie nach, wenn Sie einen kleinen Beispieldatensatz aus Ihrer aktuellen Datenbank erstellen können. Hier gibt es leider keine einfache Antwort. Was Sie tun müssen, hängt davon ab, welche Daten Sie haben und was Sie in diese Dev-DB eingeben. - grekasius


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

select * from table where date > ....

In anderen Fällen ist dies aufgrund der Struktur der Daten nicht möglich. Am Ende wird es wahrscheinlich eine Mischung und sehr schwer, richtig zu werden.


4
2017-07-27 09:04



Insbesondere können einige Datenbanken neuere Einträge (z. B. <1 Monat) enthalten, die auf Datensätze aus älteren Einträgen verweisen (z. B.> 1 Monat). Die Art und Weise, wie Sie damit umgehen, hängt ganz davon ab, wie diese Referenzen aufgebaut sind, und ist für alle außer den grundlegendsten unmöglich. - Bob


Wir hatten kürzlich die Situation, dass ein Kunde die letzten 30 Tage einer Datenbank extrahieren wollte. Wenn ALLE Tabellen das gleiche Attribut haben, in dem Sie die Datetime 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 vielleicht eine für dich?


0
2017-07-28 14:37