Восстановление репликации БД MySQL
В данном разделе описана процедура, которую нужно выполнить в случае возникновения ошибок репликации.
Пример восстановления данных на ecss2 на основе ecss1:
на ecss1
sudo mysql -uroot -ppassword
на ecss1 ecss1-mysql>
STOP SLAVE;
на ecss1 ecss1-mysql>
RESET MASTER;
на ecss1 ecss1-mysql>
FLUSH TABLES WITH READ LOCK;
Запомнить параметры File, Position (<FILE>, <POS>)
на ecss1 ecss1-mysql>
SHOW MASTER STATUS;
Не закрывайте соединения с мастер-базой. При закрытии соединения отключится режим только чтения, перейдет в режим чтения и запись.
Открыть еще одну shell сессию к этому же серверу.
Выполнить из нового окна следующую команду, для дампа необходимых данных:
на ecss1 в другом окне
sudo mysqldump --verbose --single-transaction --quote-names --complete-insert --extended-insert --routines --events --triggers -uroot -proot --master-data --opt --databases ecss_audit ecss_address_book ecss_calls_db ecss_statistics ecss_subscribers history_db web_conf > ecss1.mysql.dump
Снять режим чтения командой:
на ecss1 ecss1-mysql>
UNLOCK TABLES;
Скопировать файл ecss1.mysql.dump на ecss2.
на ecss1 в другом окне
scp ecss1.mysql.dump ecss2:/home/<user name>/
После этого зайти в mysql ecss2
на ecss2
sudo mysql -uroot -ppassword
И выполнить команду:
на ecss2 mysql-ecss2>
STOP SLAVE;
Далее в shell ecss2 выполнить команду (может выполняться длительное время):
на ecss2 в другом окне
sudo mysql -uroot -p < ecss1.mysql.dump
Далее на слейве удалить все журналы от мастера и начать репликацию с момента, когда на мастере был сделан дамп:
на ecss2 mysql-ecss2>
RESET SLAVE;
на ecss2 mysql-ecss2>
CHANGE MASTER TO MASTER_LOG_FILE='<FILE>', MASTER_LOG_POS=<POS>;
на ecss2 mysql-ecss2>
START SLAVE;
на ecss2 mysql-ecss2>
SHOW SLAVE STATUS \G;
Убедиться в том, что параметры Slave_IO_Running и Slave_SQL_Running установлены в значение Yes.
mysql> SHOW SLAVE STATUS \G;
*************************** 1. row ***************************
. . .
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
. . .
Продолжаем на SLAVE:
на ecss2 mysql-ecss2>
STOP SLAVE;
на ecss2 mysql-ecss2>
FLUSH TABLES WITH READ LOCK;
на ecss2 mysql-ecss2>
RESET MASTER;
на ecss2 mysql-ecss2>
SHOW MASTER STATUS;
Запомнить FILE и POSITION, в mysql ecss1 выполнить:
на ecss1 mysql-ecss1>
CHANGE MASTER TO MASTER_LOG_FILE='<FILE>', MASTER_LOG_POS=<POS>;
на ecss1 mysql-ecss1>
START SLAVE;
на ecss1 mysql-ecss1>
SHOW SLAVE STATUS \G;
Убедиться в том, что параметры Slave_IO_Running и Slave_SQL_Running имеют значение Yes.
mysql> SHOW SLAVE STATUS \G;
*************************** 1. row ***************************
. . .
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
. . .
Снять LOCK на ecss2 и запустить репликацию:
на ecss2 mysql-ecss2>
UNLOCK TABLES;
на ecss2 mysql-ecss2>
START SLAVE;