Ich möchte Dumps jeder MySQL-Tabelle in separate Dateien bekommen. Das Handbuch gibt an, dass die Syntax hierfür lautet
mysqldump [options] db_name [tbl_name ...]
Dies zeigt an, dass Sie die Tabellennamen vorher kennen. Ich könnte das Skript einrichten, das jetzt jeden Tabellennamen kennt, aber sagen, ich füge später eine neue Tabelle hinzu und vergesse, das Dump-Skript zu aktualisieren. Dann fehlen mir Dumps für einen oder mehrere Tische.
Gibt es eine Möglichkeit, jede vorhandene Tabelle automatisch in eine separate Datei zu kopieren? Oder muss ich ein Skript-Fu machen? Fragen Sie die Datenbank ab, rufen Sie alle Tabellennamen ab und sichern Sie sie nach Namen.
Welche Skriptsprachen können auf eine MySQL-Datenbank zugreifen, wenn ich die Script-Fu-Route gehe?
mysqlimport
kann verwendet werden, um die resultierenden Daten-TXT-Dateien zu importieren. Auch Tabellennamen, die einen Punkt enthalten,(.)
z. B.:,my.table
Führen nur zu einer gleichnamigen Datendatei (ohne Erweiterung .txt). dev.mysql.com/doc/refman/5.0/en/… Außerdem scheint dies die einzige Möglichkeit zu sein, eine--single-transaction
Tabelle pro Datei-Dump durchzuführen .FILE
Berechtigung auf dem Server erfordert und die Dateien auf die Festplatte auf dem Server schreibt.Hier ist ein Skript, das Tabellendaten als SQL-Befehle in separate, komprimierte Dateien speichert. Es erfordert nicht, auf dem MySQL-Server-Host zu sein, das Kennwort im Skript nicht fest zu codieren und ist nur für eine bestimmte Datenbank, nicht für alle Datenbanken auf dem Server:
quelle
mysqldump --extended-insert=FALSE --order-by-primary --complete-insert
Sie können dies erreichen, indem Sie:
mysqldump
# Optional variables for a backup script MYSQL_USER="root" MYSQL_PASS="something" BACKUP_DIR=/srv/backup/$(date +%Y-%m-%dT%H_%M_%S); test -d "$BACKUP_DIR" || mkdir -p "$BACKUP_DIR" # Get the database list, exclude information_schema for db in $(mysql -B -s -u $MYSQL_USER --password=$MYSQL_PASS -e 'show databases' | grep -v information_schema) do # dump each database in a separate file mysqldump -u $MYSQL_USER --password=$MYSQL_PASS "$db" | gzip > "$BACKUP_DIR/$db.sql.gz" done
quelle
--routines
und--triggers
erfassen Sie sie.Hier ist der entsprechende Import.
quelle
quelle
Es sieht so aus, als hätten alle hier vergessen,
autocommit=0;SET unique_checks=0;SET foreign_key_checks=0;
dass dies den Importprozess beschleunigen soll ...quelle
Wenn Sie alle Tabellen aus allen Datenbanken sichern möchten, kombinieren Sie einfach die Antwort von Elias Torres Arroyo und Trutane: Wenn Sie Ihr Passwort nicht auf dem Terminal angeben möchten, speichern Sie Ihr Passwort einfach in einer zusätzlichen Konfigurationsdatei (chmod 0600) - siehe Start von Mysqldump durch Cron- und Passwortsicherheit
Und das hat auch geholfen:
Überprüfen Sie, ob das Bash-Array einen Wert enthält
Arrays in Bash
benannte Argumente im Skript
quelle
Ich bin kein Bash-Meister, aber ich würde es einfach mit einem Bash-Skript machen. Ohne MySQL zu treffen, können Sie mit Kenntnis des Datenverzeichnisses und des Datenbanknamens einfach nach allen .frm-Dateien (eine für jede Tabelle in dieser Datenbank / diesem Verzeichnis) nach einer Liste von Tabellen suchen.
Ich bin mir sicher, dass es Möglichkeiten gibt, es schlanker zu machen und Argumente oder so weiter zu akzeptieren, aber das hat bei mir gut funktioniert.
tables_in_a_db_to_sql.sh
Füllen Sie die [Optionen] und die gewünschte Outfile-Konvention nach Bedarf aus und kommentieren Sie die letzte mysqldump-Zeile aus.
quelle
Für Windows-Server können Sie eine Batchdatei wie folgt verwenden:
Planen Sie es dann mit dem Windows Task Scheduler.
Wenn Sie bestimmte Tabellen in Ihrer Sicherung ausschließen möchten, beachten Sie, dass Sie in der Anweisung "show tables" eine where-Klausel verwenden können, der Spaltenname jedoch von Ihrem Datenbanknamen abhängt.
Wenn Ihr Datenbankname beispielsweise "blah" lautet, lautet Ihr Spaltenname in der Ergebnismenge " show tables " "tables_in_blah". Das heißt, Sie könnten eine where-Klausel hinzufügen, die dieser ähnelt:
oder
quelle
Siehe folgenden Artikel von Pauli Marcus:
So teilen Sie einen SQL-Datenbankspeicherauszug in tabellenweise Dateien auf
quelle
DROP TABLE
? Dies ist keine sichere Lösung.