Ich versuche, eine kleine Stichprobe von Datensätzen aus einer großen Datenbank in eine Testdatenbank zu laden.Begrenzung der Anzahl der Datensätze von mysqldump?
Wie sagen Sie mysqldump, Ihnen nur n Datensätze von 8 Millionen zu geben?
Dank
Ich versuche, eine kleine Stichprobe von Datensätzen aus einer großen Datenbank in eine Testdatenbank zu laden.Begrenzung der Anzahl der Datensätze von mysqldump?
Wie sagen Sie mysqldump, Ihnen nur n Datensätze von 8 Millionen zu geben?
Dank
mysqldump kann eine SQL-Abfrage auszuführen gegeben werden, aus dem sie die Daten für die Deponie nehmen. Sie können dann die Klausel "limit X" in Ihrer Abfrage verwenden, um die Anzahl der Zeilen zu beschränken.
Wie skaffman sagt, verwenden Sie die --Wo Option:
mysqldump --opt --where="1 limit 1000000" database
natürlich, dass Sie die erste Million Zeilen aus jeder Tabelle geben würde.
Ihr Jungs können es von PHP umgehen, wie folgend:
$username = "username";
$password = "password";
$db = "dbname";
$filename ="dumpfilename.sql";
$rows = 10;
exec("mysqldump --opt --where='1 limit ".$rows."' -u ".$username." -p".$password." ".$db." > ".$filename);
-Cheers,
Wenn Sie n
Datensätze aus einer bestimmten Tabelle erhalten möchten Sie etwas tun können:
mysqldump --opt --where="1 limit 1000000" database table > dump.sql
Dadurch werden die ersten 1000000
Zeilen aus der Tabelle table
in die Datei dump.sql
ausgegeben.
Da die Standardreihenfolge ASC ist, was in dieser Situation selten der Fall ist, benötigen Sie einen ordnungsgemäßen Datenbankentwurf, damit DESC sofort einsatzbereit ist. Wenn alle Ihre Tabellen ONE Primärschlüsselspalte mit dem gleichen Namen haben (natürlich oder Surrogat) können Sie leicht die n neuesten Datensätze Dump mit:
mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql
Dies ist ein guter Grund, warum sollten Sie immer Ihre PK Name des id und vermeiden Sie zusammengesetzte PK's, sogar in Assoziationstabellen (verwenden Sie stattdessen Ersatzschlüssel).
Tun Sie dies (Name ID und vermeiden Sie Composite PK's) und Sie müssen die relationale Datenbank Theorie ignorieren. – mpoletto
Wenn Sie Ihre Datenbank nach den Best Practices der relationalen Datenbank entwerfen, definieren Sie Ihre PKs basierend auf Daten und Entitäten. Sie können beispielsweise --option --where = "1 LIMIT 10000" verwenden. Ohne ORDER BY funktioniert das, weil MySQL auf natürliche Weise sortiert, was bedeutet, dass es der Indexreihenfolge des PKs folgt. Dann werden alle FK verknüpfter Tabellen nur Daten enthalten, die in ihrer Referenztabelle vorhanden sind, da die Reihenfolge identisch ist. – mpoletto
Die Verwendung von IDs ist eine wahre Plage vieler Entwickler. IDs wie PKs zu haben ist gleich, hat keine PKs. Ihre Integrität wurde durchbrochen, weil in den meisten Fällen eine automatische Inkrementierungsnummer nichts mit den Entitätsdaten zu tun hat. – mpoletto
Was macht die "1" vor der Grenze? – Phob
@Phob: Die Option --where wird grundsätzlich an eine Abfrage der Form 'SELECT * aus der Tabelle WHERE 'angehängt. In diesem Fall erhalten Sie' SELECT * aus der Tabelle WHERE 1 limit 1000000'. Ohne die 1 würden Sie eine ungültige Abfrage haben. Die Angabe von 1 für eine where-Klausel (da 1 immer wahr ist) wählt einfach alle Datensätze aus. –
Wow, was für ein Hack. So kann man sich im Grunde SQL auf diese Weise injizieren. – Phob