Sie werden das schockierend finden, aber Sie brauchen nur eine große Option: --opt
Was ist --opt ?
Diese standardmäßig aktivierte Option ist eine Abkürzung für die Kombination von --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick - set-charset . Es gibt einen schnellen Dump-Vorgang und erzeugt eine Dump-Datei, die schnell auf einen MySQL-Server geladen werden kann.
Da die Option - -opt standardmäßig aktiviert ist , geben Sie nur die Umkehrung an, die Option --skip-opt, um mehrere Standardeinstellungen zu deaktivieren. In der Diskussion zu mysqldump-Optionsgruppen finden Sie Informationen zum selektiven Aktivieren oder Deaktivieren einer Teilmenge der von --opt betroffenen Optionen.
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
SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;
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
Ich habe meinen mysqldump-Befehl aktualisiert (siehe meine Bearbeitung). Ich habe jedoch eine letzte Frage. Glauben Sie, dass es sich lohnen würde, auch alle folgenden Argumente zu verwenden? --add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc
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
- --opt : Ich habe bereits gesagt, dass Sie es nicht angeben müssen, da es standardmäßig aktiviert ist.
- --delayed-insert : Ich halte mich mit einer InnoDB-Datenbank unbedingt davon fern. Tatsächlich halte ich mich unerbittlich von dieser PERIODE fern !!! . Da 1) es möglich ist, dass INSERT DELAYED Daten verliert, 2) es in INSERT for MySQL Replication-Slaves konvertiert wird, 3) ein offener Fehlerbericht über die Verwendung mit Triggern in MySQL 5.6 vorliegt und nicht als Fehler angesehen wird , 4 ) es ist in MySQL 5.6 veraltet, und 5) Morgan Tocker (bekannter MySQL-Guru) hat seine Veralterung bereits 2012 vorausgesehen. Sie sollten vergessen, dass diese Option jemals existiert hat. Benutz es niemals, niemals (unendlich) !!!
- --complete-insert : Dies wird
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
anstelle von verwenden INSERT 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.
- --add-drop-table : Da --opt es für Sie aktiviert , müssen Sie es nicht angeben.
- --add-drop-database : Wenn Sie --add-drop-database löschen , wird nur die
DROP TABLE IF EXISTS
(von --add-drop-table hinzugefügte ) schneller. Wenn Sie es nicht verwenden, können Sie einfach DROP TABLE IF EXISTS
für jede Tabelle auftreten. Daher ist die Verwendung von --add-drop-database eine Frage der persönlichen Wahl.
- --tz-utc : Wenn Sie vorhaben , Daten auf demselben Server wiederherzustellen, von dem Sie eine Sicherungskopie erstellen, benötigen Sie --tz-utc nicht . Wenn Sie die Daten in einem anderen Rechenzentrum in einer anderen Zeitzone wiederherstellen und ...
- Wenn Sie dieselbe Zeitzone beibehalten möchten, von der Sie sichern, benötigen Sie --tz-utc nicht .
- Wenn die Daten die Zeitzone eines neuen Rechenzentrums verwenden sollen, benötigen Sie --tz-utc .
- BEISPIEL: Angenommen, Sie sichern eine Datenbank in New York. Das ist EST. Wenn Sie ein anderes Rechenzentrum in Seattle haben, wäre das PST. Wenn das New York Backup in Seattle wiederhergestellt werden soll und die Zeitstempel in der Datenbank weiterhin New York darstellen sollen, möchten Sie --tz-utc nicht verwenden .
- --default-character-set
Wenn Sie Ihre letzte Bearbeitung anpassen, ist dies das, was Sie besonders brauchen
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
Nochmals, ich sage, lesen Sie bitte alle Optionen für mysqldump .