Вы найдете это шокирующим, но вам нужен только один важный вариант: --opt
Что такое --opt ?
Эта опция, включенная по умолчанию, является сокращением для комбинации --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick - set-charset . Это дает быструю операцию дампа и производит файл дампа, который может быть быстро перезагружен на сервер MySQL.
Поскольку опция - -opt включена по умолчанию , вы указываете только обратное, а --skip-opt отключает несколько настроек по умолчанию. См. Обсуждение групп опций mysqldump для информации о выборочном включении или отключении подмножества опций, на которые влияет --opt.
Поскольку --opt уже включен, вам не нужно указывать --opt . Несмотря на это, вам могут понадобиться некоторые необходимые опции, которые не включены.
Запустите этот запрос в вашей базе данных
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;
Если у вас есть все таблицы InnoDB, вам нужно указать --single -action . Это автоматически деактивирует --lock-tables и позволит вам сбросить все таблицы в один и тот же момент времени и позволит одновременно выполнять новые записи.
Если у вас есть одна или несколько таблиц MyISAM, вам нужно указать --lock-all-tables . Это автоматически деактивирует --lock-таблицы , деактивирует --single-транзакции , блокирует все таблицы во всех базах данных, а затем создает дамп. Запись в таблицы InnoDB все еще может происходить, но они будут просто поставлены в очередь до снятия блокировок. Любое соединение с БД, пытающееся выполнить запись в любые таблицы MyISAM, будет фактически приостановлено до снятия всех блокировок.
Запустите этот запрос: SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
Если Number_Of_Stored_Procedures
больше нуля, используйте --routines .
Запустите этот запрос: SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Если Number_Of_Triggers
больше нуля, используйте --triggers .
ПРЕДУПРЕЖДЕНИЕ . Пожалуйста, не используйте --order-by-primary для дампа всех баз данных, потому что это может сделать индексы BTREE довольно односторонними при перезагрузке. --order-by-primary следует использовать только при выгрузке отдельной таблицы, которая, как вы знаете, имеет целочисленный первичный ключ и будет иметь много сканирований диапазона из вашего приложения.
Если вам нужны более творческие типы резервных копий mysqldump, см. Мой старый пост. Как мне оптимизировать mysqldump для большой базы данных? ,
Пожалуйста, прочитайте все опции для mysqldump .
ОБНОВЛЕНИЕ 2014-12-29 09:44 EST
Я обновил свою команду mysqldump (см. Мое редактирование). У меня есть последний вопрос, хотя. Как вы думаете, стоило бы также использовать все следующие аргументы? --add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc
Рассматривая ваш комментарий и последние изменения, давайте рассмотрим каждый из этих вариантов и посмотрим, нужен ли вам какой-либо из них.
- --opt : я уже сказал, что вам не нужно указывать его, потому что он включен по умолчанию.
- --delayed-insert : Я твердо держусь подальше от этой базы данных InnoDB. На самом деле, я непреклонно держусь подальше от этого ПЕРИОДА !!! , Так как 1) возможно, что INSERT DELAYED может потерять данные, 2) он преобразуется в INSERT для подчиненных MySQL Replication, 3) имеется открытый отчет об ошибке его использования с триггерами в MySQL 5.6 и не считается ошибкой , 4 ) он устарел в MySQL 5.6 и 5) Morgan Tocker (известный MySQL Guru) предвидел его устаревание еще в 2012 году , вы должны забыть, что эта опция когда-либо существовала. Никогда, никогда (бесконечность) не используйте это !!!
- --complete-insert : будет использоваться
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
вместо INSERT INTO tblname VALUES ...
. Это может привести к переполнению mysqldump, если в определении таблицы много столбцов и много строк в таблице. Не используйте это.
- --add-drop-table : так как --opt включает его для вас, вам не нужно указывать его.
- --add-drop-database : если вы удалите --add-drop-database , это просто сделает
DROP TABLE IF EXISTS
(что было добавлено --add-drop-table ) быстрее. Не использовать его просто позволяет DROP TABLE IF EXISTS
происходить для каждой таблицы. Таким образом, использование --add-drop-database - дело личного выбора.
- --tz-utc : если вы планируете восстанавливать данные на том же сервере, с которого выполняете резервное копирование, вам не нужен --tz-utc . Если вы восстановите данные в другом центре обработки данных в другом часовом поясе и ...
- если вы хотите сохранить тот же часовой пояс, из которого вы делаете резервную копию, вам не нужен --tz-utc .
- если вы хотите, чтобы данные использовали часовой пояс нового центра обработки данных, вам нужно --tz-utc .
- ПРИМЕР: скажем, вы сделали резервную копию базы данных в Нью-Йорке. Это EST. Если у вас есть другой дата-центр в Сиэтле, это будет PST. Если вы хотите, чтобы резервная копия New York была восстановлена в Сиэтле, и вы хотите, чтобы временные метки в базе данных по-прежнему представляли Нью-Йорк, вы не хотите использовать --tz-utc .
- --default-символьный набор
Настройка вашего последнего редактирования, это то, что вам особенно нужно
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
Опять же, я говорю, пожалуйста, прочитайте все варианты mysqldump .