Ich möchte mysqldump vermeiden, da dies in einer Form ausgegeben wird, die nur für mysql zum Lesen geeignet ist. CSV scheint universeller zu sein (eine Datei pro Tabelle ist in Ordnung). Aber wenn mysqldump Vorteile hat, bin ich ganz Ohr. Außerdem möchte ich etwas, das ich über die Befehlszeile (Linux) ausführen kann. Wenn das ein MySQL-Skript ist, wären Hinweise, wie man so etwas macht, hilfreich.
mysql
command-line
csv
backup
träumt
quelle
quelle
Antworten:
Wenn Sie mit Tabellenkalkulationen umgehen können und Ihre Daten nicht binär sind, verwenden Sie die
-B
Option für denmysql
Befehl. Mit dieser Option werden TSV-Dateien (tabulatorgetrennte Dateien) generiert, die ganz einfach in Excel usw. importiert werden können:Wenn Sie direkten Zugriff auf das Dateisystem des Servers haben, können Sie alternativ Folgendes verwenden,
SELECT INTO OUTFILE
um echte CSV-Dateien zu generieren:quelle
\. file.sql
liest) angezeigt wird . Abhängig von Ihrer Installation finden Sie es wahrscheinlich bei/var/lib/mysql/[db_name]/table.csv
In MySQL selbst können Sie die CSV-Ausgabe wie folgt angeben:
Von http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/
quelle
Sie können eine ganze Datenbank auf einmal mit der
mysqldump's --tab
Option sichern. Sie geben einen Verzeichnispfad an und es wird eine.sql
Datei mit derCREATE TABLE DROP IF EXISTS
Syntax und eine.txt
Datei mit dem Inhalt auf der Registerkarte getrennt erstellt. Um durch Kommas getrennte Dateien zu erstellen, können Sie Folgendes verwenden:Dieser Pfad muss sowohl vom MySQL-Benutzer als auch vom Benutzer, der den Befehl ausführt, beschreibbar sein. Der Einfachheit halber empfehle ich daher
chmod 777 /tmp/path_to_dump/
zuerst.quelle
mysqldump: You must use option --tab with --fields-...
GRANT FILE ON *.* TO 'user1'@'localhost';
- stackoverflow.com/a/15014385/1707015 . In meinem Fall musste ich/var/lib/mysql-files/
(anstelle von/tmp/
) den Benutzer auf mysql: mysql setzen und die Rechte auf 777 - stackoverflow.com/a/32737616/1707015 setzen .Die Option "In Outfile auswählen" würde für mich nicht funktionieren, aber der folgende Umweg, um tabulatorgetrennte Dateien durch SED zu leiten, hat Folgendes bewirkt:
quelle
t
wird , mit ersetzt", "
in der Ausgabedatei. Nicht genau das, wonach ich gesucht habe.Hier ist der einfachste Befehl dafür
Wenn der Spaltenwert ein Komma enthält, können wir mit dem folgenden Befehl .tsv anstelle von .csv generieren
quelle
mysql -hlocalhost -uroot -e 'select * from databaseName.tableNaame' | sed 's/\t/,/g' > /tmp/output.csv
`Wenn Sie wirklich eine "Sicherung" benötigen, benötigen Sie auch ein Datenbankschema wie Tabellendefinitionen, Ansichtsdefinitionen, Speicherprozeduren usw. Eine Sicherung einer Datenbank besteht nicht nur aus den Daten.
Der Wert des mysqldump-Formats für die Sicherung besteht insbesondere darin, dass es sehr EINFACH ist, es zum Wiederherstellen von mysql-Datenbanken zu verwenden. Ein Backup, das nicht einfach wiederhergestellt werden kann, ist weitaus weniger nützlich. Wenn Sie nach einer Methode suchen, mit der Sie MySQL-Daten zuverlässig sichern können, damit Sie sie auf einem MySQL-Server wiederherstellen können, sollten Sie sich an das Tool MySQLldump halten.
MySQL ist kostenlos und läuft auf vielen verschiedenen Plattformen. Das Einrichten eines neuen MySQL-Servers, auf dem ich wiederherstellen kann, ist einfach. Ich mache mir überhaupt keine Sorgen, dass ich MySQL nicht einrichten kann, damit ich eine Wiederherstellung durchführen kann.
Ich würde mir viel mehr Sorgen machen, wenn eine benutzerdefinierte Sicherung / Wiederherstellung basierend auf einem fragilen Format wie csv / tsv fehlschlägt. Sind Sie sicher, dass alle Ihre Anführungszeichen, Kommas oder Tabulatoren in Ihren Daten korrekt maskiert und dann von Ihrem Wiederherstellungstool korrekt analysiert werden?
Wenn Sie nach einer Methode zum Extrahieren der Daten suchen, finden Sie in den anderen Antworten mehrere.
quelle
Sie können das folgende Skript verwenden, um die Ausgabe in CSV-Dateien zu erhalten. Eine Datei pro Tabelle mit Headern.
Benutzer ist Ihr Benutzername, Kennwort ist das Kennwort, wenn Sie das Kennwort nicht für jede Tabelle eingeben möchten, und mydb ist der Datenbankname.
Erläuterung des Skripts: Der erste Ausdruck in sed ersetzt die Registerkarten durch ",", sodass Felder in doppelte Anführungszeichen gesetzt und durch Kommas getrennt sind. Der zweite fügt am Anfang ein doppeltes Anführungszeichen ein und der dritte am Ende ein doppeltes Anführungszeichen. Und der letzte kümmert sich um das \ n.
quelle
--skip-column-names
in meiner Version von MySQL stehenSchauen Sie sich mk-parallel-dump an, das Teil der immer nützlichen Maatkit - Tool-Suite ist . Dies kann durch Kommas getrennte Dateien mit der Option --csv sichern.
Dies kann Ihre gesamte Datenbank ohne Angabe einzelner Tabellen ausführen, und Sie können Gruppen von Tabellen in einer Backupset-Tabelle angeben.
Beachten Sie, dass Tabellendefinitionen, Ansichten und Trigger auch in separaten Dateien gespeichert werden. Zusätzlich zur Bereitstellung eines vollständigen Backups in einer allgemein zugänglichen Form kann es auch sofort mit mk-parallel-restore wiederhergestellt werden
quelle
maatkit
scheint Teil despercona toolkit
Jetzt zu sein, aber ich kann keine entsprechenden Werkzeuge finden.Zweizeilige PowerShell-Antwort:
Boom-Bata-Boom
-D
= der Name Ihrer Datenbank-e
= Abfrage-B
= tabulatorgetrenntquelle
Wenn Sie die gesamte Datenbank als CSV ausgeben möchten
quelle