После некоторого поиска я получил следующие настройки:
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
Пока все хорошо, но у меня есть несколько вопросов, касающихся параметров, а также исполнения.
Что касается моей первой проблемы, я просто хочу убедиться, что все они необходимы и не вызывают никаких конфликтов при совместном использовании. В конечном итоге я хотел бы создать очень надежный и согласованный файл дампа с миллионами записей, который создает таблицы, базы данных и вставляет данные. Хорошо, что создание базы данных на некоторое время не является проблемой для меня. Моя единственная цель - создать надежный и согласованный файл дампа.
Что касается моего второго концерта, я хотел бы знать, как получить информацию, когда команда не работает и, если да, вывести исключение.
Есть идеи?
РЕДАКТИРОВАТЬ
Это моя обновленная команда mysqldump, основанная на отзывах RolandoMySQLDBA.
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
источник
Ответы:
Вы найдете это шокирующим, но вам нужен только один важный вариант: --opt
Что такое --opt ?
Поскольку --opt уже включен, вам не нужно указывать --opt . Несмотря на это, вам могут понадобиться некоторые необходимые опции, которые не включены.
Запустите этот запрос в вашей базе данных
Если у вас есть все таблицы 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
Рассматривая ваш комментарий и последние изменения, давайте рассмотрим каждый из этих вариантов и посмотрим, нужен ли вам какой-либо из них.
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
вместоINSERT INTO tblname VALUES ...
. Это может привести к переполнению mysqldump, если в определении таблицы много столбцов и много строк в таблице. Не используйте это.DROP TABLE IF EXISTS
(что было добавлено --add-drop-table ) быстрее. Не использовать его просто позволяетDROP TABLE IF EXISTS
происходить для каждой таблицы. Таким образом, использование --add-drop-database - дело личного выбора.Настройка вашего последнего редактирования, это то, что вам особенно нужно
Опять же, я говорю, пожалуйста, прочитайте все варианты mysqldump .
источник
--add-drop-trigger
?