Я думал, что читая эту часть документации, я нашел больше информации:
4.5.4. mysqldump - программа резервного копирования базы данных
http://dev.mysql.com/doc/en/mysqldump.html
Для таблиц InnoDB mysqldump предоставляет способ сделать онлайн
резервное копирование:
shell> mysqldump --all-databases --single-transaction > all_databases.sql
Эта резервная копия получает глобальную блокировку чтения для всех таблиц (используя FLUSH
TABLES WITH READ LOCK) в начале дампа. Как только это
блокировка получена, считываются двоичные лог-координаты и
Блокировка снята. Если длинные операторы обновления выполняются, когда
Выдается инструкция FLUSH, сервер MySQL может зависнуть до
эти заявления заканчиваются. После этого дамп освобождается от блокировки и
не мешает чтению и записи на столах. Если обновление
утверждения, которые получает сервер MySQL, короткие (с точки зрения
время выполнения), начальный период блокировки не должен быть заметным,
даже со многими обновлениями.
Конфликт с параметрами --opt
и --single-transaction
:
- опция
Эта опция является сокращенной. Это то же самое, что указать
--add-drop-table --add-locks --create-options --disable-keys - расширенная вставка - блокировка таблиц --quick --set-charset. Это должно дать вам быструю операцию дампа и создать файл дампа, который можно перезагрузить
на сервер MySQL быстро.
Опция --opt включена по умолчанию. Используйте --skip-opt, чтобы отключить его.
Если я правильно понимаю ваш вопрос, вы хотите, чтобы фактические данные и DDL (язык определения данных) вместе, потому что, если вы хотите только DDL, вы бы использовали --no-data
. Более подробную информацию об этом можно найти по адресу:
http://dev.mysql.com/doc/workbench/en/wb-reverse-engineer-create-script.html
Используйте параметр --databases с mysqldump, если вы хотите создать
база данных, а также все ее объекты. Если нет CREATE DATABASE
Инструкция db_name в вашем файле скрипта, вы должны импортировать базу данных
объекты в существующую схему или, если нет схемы, новый
безымянная схема создана.
Как предложено Подробное руководство по MySQL 5 Майкл Кофлер Я бы предложил следующие варианты:
--skip-opt
--single-transaction
--add-drop-table
--create-options
--quick
--extended-insert
--set-charset
--disable-keys
Кроме того, не упоминается --order-by-primary
Также, если вы используете опцию --databases
, вам также следует использовать --add-drop-database
, особенно в сочетании с этим ответом Если вы выполняете резервное копирование баз данных, которые Для подключения к различным сетям вам может понадобиться опция --compress
.
Таким образом, команда mysqldump (без использования параметров --compress
, --databases
или --add-drop-database
) будет выглядеть так:
mysqldump --skip-opt --order-by-primary --single-transaction --add-drop-table --create-options --quick --extended-insert --set-charset -h db_host -u username --password="myPassword" db_name | mysql --host=other_host db_name
Я удалил ссылку на --disable-keys
, которая была дана в книге, так как она неэффективна с InnoDB, насколько я понимаю. Руководство MySql гласит:
Для каждой таблицы окружите операторы INSERT символом / *! 40000 ALTER
TABLE tbl_name ОТКЛЮЧИТЬ КЛЮЧИ /; и / ! 40000 ALTER TABLE tbl_name
ENABLE KEYS * /; заявления. Это делает загрузку файла дампа быстрее
потому что индексы создаются после того, как все строки вставлены. это
опция действует только для неуникальных индексов таблиц MyISAM.
Я также нашел этот отчет об ошибке http://bugs.mysql.com/bug.php?id=64309, в котором внизу есть комментарии от Пола Дюбуа, который также написал несколько книг , на которые у меня нет никаких ссылок по этому конкретному вопросу, кроме этих комментариев найдено в отчете об ошибке.
Теперь, чтобы создать « Ultimate Backup », я бы посоветовал рассмотреть что-то вроде этого сценария оболочки
- https://github.com/red-ant/mysql-svn-backup/blob/master/mysql-svn.sh