Несмотря на то, что сценарий Росса находится на правильном пути, @joatis прав, когда он говорит остановить подчиненное устройство перед проверкой позиции главного журнала. Причина в том, что READ LOCK не сохранит Read_Master_Log_Pos
, полученный с помощью SHOW SLAVE STATUS
.
Чтобы убедиться, что это так, войдите в MySQL на своем ведомом устройстве и запустите:
FLUSH TABLES WITH READ LOCK
SHOW SLAVE STATUS \G
Обратите внимание на Read_Master_Log_Pos
Подождите несколько секунд и снова запустите:
SHOW SLAVE STATUS \G
Вы должны заметить, что Read_Master_Log_Pos
изменился.
Поскольку резервное копирование начинается быстро после того, как мы проверим состояние, позиция журнала, записанная сценарием, может быть точной. Тем не менее, предпочтительнее вместо этого следовать процедуре здесь:
http://dev.mysql.com/doc/refman/5.0/en/replication-solutions-backups-mysqldump.html
И запустить STOP SLAVE SQL_THREAD;
вместо FLUSH TABLES WITH READ LOCK
на время резервного копирования.
Когда закончите, снова начните репликацию с START SLAVE
Также, если вы хотите сделать резервную копию бинарных журналов для инкрементных резервных копий или в качестве дополнительной меры безопасности, полезно добавить --flush-logs к переменной $ dumpoptions выше