MySQL-Dump per Abfrage

220

Ist es möglich, als mysqldumpSingle zu tun SQL query?

Ich meine, die gesamte Datenbank zu sichern , wie phpmyadmines beim Exportieren der Fall istSQL

Jakub Arnold
quelle

Antworten:

285

nicht mysqldump, sondern mysql cli ...

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase

Sie können es in eine Datei umleiten, wenn Sie möchten:

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt

Update: Ursprünglicher Beitrag fragte, ob er per Abfrage aus der Datenbank sichern könne. Was er fragte und was er meinte, war anders. Er wollte wirklich nur alle Tische mysqldump.

mysqldump --tables myTable --where="id < 1000"
Zak
quelle
22
Wie kann ich diese gedumpte txt-Datei wiederherstellen?
Vivek S
3
für diejenigen, die den MySQL-E-Ansatz ausprobieren. Ich musste das Skript ein wenig anpassen, um für mich zu arbeiten. Hierfür müssen Sie beim Ausführen das SQL-Kennwort eingeben. mysql -e "wähle * aus der Tabelle WHERE query = 'asdasd'" -u root -p --database = DBNAME> text.txt
RichardW11
13
Sie können einfach eine neue Tabelle für die Abfrage erstellen (CREATE TABLE SELECT) und diese Tabelle dann mit mysqldump sichern. Auf diese Weise können Sie es später problemlos wiederherstellen.
Quano
1
Wer mysqldump verwenden und die Datei wiederherstellen möchte, kann hier nachsehen
Syco
2
Führen Sie mysqlimport --ignore-lines = 1 --fields-terminated-by = '\ t' aus, um Daten zu importieren, die mit mysql -e mit der Option -B exportiert werden und als tabulatorgetrennte Ausgabe ausgegeben werden. Siehe: stackoverflow.com/a/17071108/1676044
Kevin Borders
259

Das sollte funktionieren

mysqldump --databases X --tables Y --where="1 limit 1000000"
Thomas Ahle
quelle
4
Ein besseres Beispiel könnte etwas sein, das tatsächlich wie eine where-Klausel aussieht, wie --where = "myColumn <1000" - die ersten Millionen Zeilen jeder Tabelle scheinen eine seltsame Sache zu sein;)
ijw
@ijw Wenn Sie eine leicht wieder einfügbare Sicherung Ihrer Tabelle erstellen möchten, benötigen Sie wahrscheinlich keine where-Klausel für etwas anderes als Limits.
Thomas Ahle
3
@ Sagotharan: Nun, es ist keine Frage. Das ist wahrscheinlich der Grund.
Leichtigkeitsrennen im Orbit
79
!!WARNUNG!! mysqldump fügt oben in der exportierten Datei den Befehl 'DROP TABLE' hinzu. Das heißt, wenn Sie einen Teilexport durchführen und dann erneut importieren, verlieren Sie alles andere. Nun ja, habe ich.
Tamlyn
34
Ja, um beim Wiederherstellen aus der gespeicherten Datendatei nicht alle Daten in Ihrer Tabelle zu löschen , müssen Sie die --no-create-infoOption hinzufügen . Siehe meine Antwort für ein Beispiel.
Gary
71

Sie können eine Abfrage wie folgt als CSV ausgeben:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Kerl
quelle
8
Was ist, wenn ich mehrere Tabellen sichern möchte?
SIFE
10
Dadurch wird eine Datei auf dem Computer erstellt, auf dem die MySQL-Datenbank ausgeführt wird. Wenn Sie also von einer Remote-Konsole aus Fragen stellen, schlägt diese Methode fehl. Wenn es eine Möglichkeit gibt, dies auch von einer Remote-Konsole aus zu tun, lassen Sie es mich bitte wissen.
Ritter
2
Wo speichert es die Datei?
Techlord
1
@dknight Ich gehe davon aus, dass Sie eine Remote-Konsole über eine Terminalkonsole meinen. In diesem Fall können Sie die Dump-Datei abrufen, scpnachdem die Verbindung beendet wurde. Hier ist ein Beispiel. scp [email protected]:/tmp/querydump.csv ~/local.csv
Luke
Es scheint unsicher zu sein: # 1290 - Der MySQL-Server wird mit der Option --secure-file-priv ausgeführt, sodass diese Anweisung nicht ausgeführt werden kann
mikep
64

Speichern Sie eine Tabelle mit einer where-Abfrage:

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql

Einen ganzen Tisch wegwerfen:

mysqldump mydatabase mytable > data.sql

Anmerkungen:

  • Ersetzen mydatabase, mytableund die where - Anweisung mit dem gewünschten Werten.
  • Standardmäßig mysqldumpgehören DROP TABLEund CREATE TABLEin seinen Ausgabeanweisungen. Wenn Sie daher beim Wiederherstellen aus der gespeicherten Datendatei nicht alle Daten in Ihrer Tabelle löschen möchten , stellen Sie sicher, dass Sie die --no-create-infoOption verwenden.
  • Unter Umständen müssen Sie die entsprechenden hinzuzufügen -h, -uund -pOptionen auf die Beispielbefehle oben , um die gewünschte Datenbank - Host, Benutzer angeben, und das Kennwort, respectively.
Gary
quelle
38

Sie können die Option --where auf mysqldump verwenden, um eine Ausgabe zu erstellen, auf die Sie warten:

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql

Maximal 100 Zeilen aus test.t1 werden aus der Datenbanktabelle ausgegeben.

Prost, WB

Wagner Bianchi
quelle
6

Wenn Sie Ihre letzten n Datensätze in eine Datei exportieren möchten, können Sie Folgendes ausführen:

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql

Mit dem obigen Befehl werden die letzten 100 Datensätze in export_file.sql gespeichert, vorausgesetzt, die Tabelle, aus der Sie exportieren, verfügt über eine automatisch inkrementierte ID-Spalte.

Sie müssen die Werte für Benutzer, localhost, Datenbank und Tabelle ändern. Sie können optional die ID-Spalte und den Namen der Exportdatei ändern.

aullah
quelle
5

MySQL Workbench hat diese Funktion auch ordentlich in der GUI. Führen Sie einfach eine Abfrage aus und klicken Sie auf das Speichersymbol neben Exportieren / Importieren:

Geben Sie hier die Bildbeschreibung ein

Wählen Sie dann "SQL INSERT-Anweisungen (* .sql)" in der Liste.

Geben Sie hier die Bildbeschreibung ein

Geben Sie einen Namen ein, klicken Sie auf Speichern, bestätigen Sie den Tabellennamen und Sie erhalten Ihre Dump-Datei.

MPelletier
quelle
3

Das oben Genannte hier zu kombinieren, ist mein praktisches Beispiel, Datensätze basierend auf Meterid und Zeitstempel auszuwählen. Ich habe diesen Befehl seit Jahren gebraucht. Wird sehr schnell ausgeführt.

mysqldump -uuser -ppassword main_dbo trHourly --where="MeterID =5406 AND TIMESTAMP<'2014-10-13 05:00:00'" --no-create-info --skip-extended-insert | grep  '^INSERT' > 5406.sql
zzapper
quelle
-1

mysql Exportiert die Befehlszeile der Abfrageergebnisse:

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt
lanni654321
quelle
es funktioniert für mich in Ubuntu, Befehl: mysql -h localhost -u root -p Datenbankname -e "wähle * von Benutzern mit id = 1; wähle * von Mitarbeitern mit id = 1" --xml> / var / www / html / project / backups / db.xml
Ramesh