Ich versuche, eine kleine Stichprobe von Datensätzen aus einer großen Datenbank in eine Testdatenbank zu laden.
Wie können Sie mysqldump anweisen, Ihnen nur n von 8 Millionen Datensätzen zu geben?
Vielen Dank
Verwenden Sie, wie Skaffman sagt, die Option --where :
mysqldump --opt --where="1 limit 1000000" database
Das würde Ihnen natürlich die ersten Millionen Zeilen aus jeder Tabelle geben.
SELECT * from table WHERE
In diesem Fall erhalten Sie alsoSELECT * from table WHERE 1 limit 1000000
. Ohne die 1 hätten Sie eine ungültige Abfrage. Wenn Sie 1 für eine where-Klausel angeben (da 1 immer wahr ist), werden einfach alle Datensätze ausgewählt.mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database
, um die zweite Seite mit 1 Million Datensätzen abzurufen. Stellen Sie sicher, dass Sie das Flag --no-create-info auf anderen Seiten als der ersten verwenden, um nur die Daten zu sichern und das Erstellungs-Tabellenmaterial wegzulassen.Wenn Sie
n
Datensätze aus einer bestimmten Tabelle abrufen möchten, können Sie Folgendes tun:Dadurch werden die ersten
1000000
Zeilen aus der genannten Tabelle ausgegebentable
in die Datei geschriebendump.sql
.quelle
mysqldump kann eine SQL-Abfrage zur Ausführung erhalten, aus der die Daten für den Speicherauszug entnommen werden. Sie können dann die Klausel "limit X" in Ihrer Abfrage verwenden, um die Anzahl der Zeilen zu beschränken.
quelle
Da die Standardreihenfolge ASC ist, was in dieser Situation selten der Fall ist, benötigen Sie ein ordnungsgemäßes Datenbankdesign, damit DESC sofort funktioniert. Wenn alle Ihre Tabellen EINE Primärschlüsselspalte mit demselben Namen haben (natürlich oder als Ersatz), können Sie die n neuesten Datensätze einfach wie folgt sichern:
Dies ist ein perfekter Grund, warum Sie immer die ID Ihrer PK benennen sollten und zusammengesetzte PKs auch in Zuordnungstabellen vermeiden sollten (verwenden Sie stattdessen Ersatzschlüssel).
quelle