Документация по этому вопросу на сайте MySQL крайне устарела и изобилует ножными ружьями (такими как interactive_timeout). Выдача FLUSH TABLES с READ LOCK как часть экспорта мастера обычно имеет смысл только при координации со снимком хранилища / файловой системы, такой как LVM или zfs.
Если вы собираетесь использовать mysqldump, вам следует вместо этого полагаться на опцию --master-data, чтобы защититься от человеческих ошибок и как можно быстрее снять блокировки на мастере.
Предположим, что главное устройство - 192.168.100.50, а ведомое - 192.168.100.51, для каждого сервера настроен отдельный идентификатор сервера, для главного устройства есть двоичный вход в систему, а для ведомого устройства только для чтения = 1 в my.cnf
Чтобы подготовить подчиненное устройство к возможности начать репликацию сразу после импорта дампа, введите команду CHANGE MASTER, но пропустите имя и позицию файла журнала:
slaveserver> CHANGE MASTER TO MASTER_HOST='192.168.100.50', MASTER_USER='replica', MASTER_PASSWORD='asdmk3qwdq1';
Выпустите GRANT на ведущем устройстве для использования ведомым:
masterserver> GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.100.51' IDENTIFIED BY 'asdmk3qwdq1';
Экспорт мастера (на экране) с использованием сжатия и автоматической фиксации правильных двоичных лог-координат:
mysqldump --master-data --all-databases --flush-privileges | gzip -1 > replication.sql.gz
Скопируйте файл replication.sql.gz на ведомое устройство, а затем импортируйте его с zcat в экземпляр MySQL, работающий на ведомом устройстве:
zcat replication.sql.gz | mysql
Запустите репликацию, введя команду на ведомое устройство:
slaveserver> START SLAVE;
При необходимости обновите файл /root/.my.cnf на ведомом устройстве, чтобы сохранить тот же пароль root, что и на главном устройстве.
Если вы используете 5.1+, лучше сначала установить binlog_format мастера на MIXED или ROW. Помните, что события, зарегистрированные в строке, являются медленными для таблиц, в которых отсутствует первичный ключ. Обычно это лучше, чем альтернативная (и используемая по умолчанию) конфигурация оператора binlog_format = (на ведущем устройстве), поскольку с меньшей вероятностью выдает неверные данные на ведомом устройстве.
Если вы должны (но, вероятно, не должны) фильтровать репликацию, сделайте это с опциями ведомого устройства replicate-wild-do-table = dbname.% Или replicate-wild-ignore-table = badDB.% И используйте только binlog_format = row
Этот процесс будет удерживать глобальную блокировку на мастере на время выполнения команды mysqldump, но не будет влиять на мастер.
Если у вас возникает соблазн использовать mysqldump --master-data --all-database --single -action (поскольку вы используете только таблицы InnoDB), возможно, вам лучше использовать MySQL Enterprise Backup или реализацию с открытым исходным кодом, называемую xtrabackup. (любезно предоставлено Percona)