Was sind die optimalen mysqldump-Einstellungen? [geschlossen]

14

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
user706838
quelle
Lesen Sie die einzelnen Argumente und deren Vorteile und wählen Sie aus, welche Ihnen zusagen würden. Machen Sie sich auch mit Skripten vertraut, um Fehler auszulösen.
Mannoj
Cool. Aber das beantwortet meine Frage nicht wirklich. Zum Beispiel, welche von ihnen benutzen SIE immer?
User706838
Vergib mir meine Unwissenheit, bei dieser Frage geht es nicht darum, ein Buch oder eine Website zu empfehlen. Ich denke also, es sollte keine meinungsbasierte Art von Frage sein. Allerdings wären einige Antworten je nach Fachwissen von höherer Qualität und würden durch Tests untermauert. Meiner Meinung nach ist die Frage mit einem klar definierten Ziel perfekt formuliert.
user10089632

Antworten:

30

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_Proceduresgröß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_Triggersgröß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

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 .

RolandoMySQLDBA
quelle
Info zu --add-drop-database: Stellt dies nicht auch sicher, dass Ihre Datenbank keine anderen zufälligen Tabellen enthält, die sich nicht in Ihrem Speicherauszug befinden? Wenn jemand manuell eine zufällige Testtabelle in Ihrer Datenbank erstellt hätte, wäre diese nach dem erneuten Laden aus dem Speicherauszug ohne diese Option weiterhin vorhanden. Es kommt also darauf an, ob Sie das wollen oder nicht. Richtig?
Jschultz410
Was ist --add-drop-trigger?
Lonix