Nach einiger Suche habe ich folgende Einstellungen vorgenommen:
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--add-drop-database\
--add-drop-table\
--add-locks\
--complete-insert\
--extended-insert\
--lock-all-tables\
--create-options\
--disable-keys\
--quick\
--order-by-primary\
--set-charset\
--tz-utc\
> dump/test.sql
Soweit so gut, aber ich habe einige Fragen zu den Parametern sowie zur Ausführung.
In Bezug auf meine erste Sorge möchte ich nur sicherstellen, dass alle von ihnen erforderlich sind und keine Konflikte verursachen, wenn sie zusammen verwendet werden. Letztendlich möchte ich eine sehr robuste und konsistente Dump-Datei mit Millionen von Datensätzen erstellen, mit der Tabellen, Datenbanken und Daten eingefügt werden. Das Gute ist, dass es für mich kein Problem ist, die Datenbank für eine Weile nicht verfügbar zu machen. Mein einziges Ziel ist es, eine robuste und konsistente Dump-Datei zu erstellen.
In Bezug auf mein zweites Konzert würde ich gerne wissen, wie ich informiert werde, wenn das Kommando schief geht und wenn ja, eine Ausnahme auslöst.
Irgendwelche Ideen?
BEARBEITEN
Dies ist mein aktualisierter mysqldump-Befehl, der auf dem Feedback von RolandoMySQLDBA basiert.
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql
quelle
Antworten:
Sie werden das schockierend finden, aber Sie brauchen nur eine große Option: --opt
Was ist --opt ?
Da --opt bereits aktiviert ist, müssen Sie --opt nicht angeben . Ungeachtet dessen benötigen Sie möglicherweise einige notwendige Optionen, die nicht enthalten sind.
Führen Sie diese Abfrage in Ihrer Datenbank aus
Wenn Sie alle InnoDB-Tabellen haben, müssen Sie --single-transaction angeben . Dadurch wird --lock-tables automatisch deaktiviert , und Sie können alle Tabellen zum gleichen Zeitpunkt sichern und gleichzeitig neue Schreibvorgänge zulassen.
Wenn Sie eine oder mehrere MyISAM-Tabellen haben, müssen Sie --lock-all-tables angeben . Dies deaktiviert automatisch --lock-tables , deaktiviert --single-transaction , sperrt alle Tabellen in allen Datenbanken und erstellt dann den Dump. Schreibvorgänge in InnoDB-Tabellen können weiterhin auftreten, sie werden jedoch nur in die Warteschlange gestellt, bis die Sperren aufgehoben werden. Jede DB-Verbindung, die versucht, in eine MyISAM-Tabelle zu schreiben, wird angehalten, bis alle Sperren aufgehoben sind.
Führen Sie diese Abfrage aus:
SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
Wenn
Number_Of_Stored_Procedures
größer als Null ist, verwenden Sie --routines .Führen Sie diese Abfrage aus:
SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Wenn
Number_Of_Triggers
größer als Null ist, verwenden Sie --trigger .CAVEAT : Bitte verwenden Sie --order-by-primary nicht zum Sichern aller Datenbanken, da BTREE- Indizes beim Neuladen möglicherweise eher schief laufen. --order-by-primary sollte nur verwendet werden, wenn Sie eine einzelne Tabelle sichern, von der Sie wissen, dass sie einen ganzzahligen Primärschlüssel hat und viele Bereichsüberprüfungen von Ihrer Anwendung aus durchführen wird.
Wenn Sie kreativere Arten von mysqldump-Sicherungen benötigen, lesen Sie meinen alten Beitrag. Wie kann ich einen mysqldump einer großen Datenbank optimieren? .
Bitte lesen Sie alle Optionen für mysqldump .
UPDATE 29.12.2014 09:44 EST
Schauen wir uns Ihren Kommentar und Ihre letzte Bearbeitung an und schauen wir uns jede dieser Optionen an, um festzustellen, ob Sie eine davon benötigen
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
anstelle von verwendenINSERT INTO tblname VALUES ...
. Dies könnte den mysqldump aufblähen lassen, wenn die Tabellendefinition viele Spalten und viele Zeilen in der Tabelle enthält. Benutze es nicht.DROP TABLE IF EXISTS
(von --add-drop-table hinzugefügte ) schneller. Wenn Sie es nicht verwenden, können Sie einfachDROP TABLE IF EXISTS
für jede Tabelle auftreten. Daher ist die Verwendung von --add-drop-database eine Frage der persönlichen Wahl.Wenn Sie Ihre letzte Bearbeitung anpassen, ist dies das, was Sie besonders brauchen
Nochmals, ich sage, lesen Sie bitte alle Optionen für mysqldump .
quelle
--add-drop-trigger
?