Восстановление репликации в MySQL
Исправление единичной ошибки
Полное восстановление
На master'е
Снять дамп
localhost:~$ mysqldump --master-data=2 --flush-logs --routines --triggers --opt --user=$USER --password=$PASS --host=$HOST --databases <DATABASE_NAME_1> <DATABASE_NAME_2> > /tmp/masterdump.sql
На slave'е
mysql> show slave status\G *************************** 1. row *************************** ... Slave_IO_Running: No Slave_SQL_Running: No ... Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' ...
mysql> stop slave; Query OK, 0 rows affected, 1 warning (0.01 sec)
Я использовал значение master-data=2, поэтому CHANGE MASTER TO надо выполнить руками
cat /tmp/masterdump.sql | grep -m1 'CHANGE MASTER' /tmp/masterdump.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.044000', MASTER_LOG_POS=107;
localhost:~$ mysql --user=$USER --password=$PASS --host=$HOST < /tmp/masterdump.sql
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.044000', MASTER_LOG_POS=107;
mysql> start slave; Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G *************************** 1. row *************************** ... Slave_IO_Running: Yes Slave_SQL_Running: Yes ... Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: ... Master_Log_File: mysql-bin.043998 Relay_Master_Log_File: mysql-bin.043997 Seconds_Behind_Master: 2236
Подождем немного, пока подтянутся изменения
mysql> show slave status\G *************************** 1. row *************************** ... Slave_IO_Running: Yes Slave_SQL_Running: Yes ... Master_Log_File: mysql-bin.044002 Read_Master_Log_Pos: 51783684 Relay_Log_File: mysqld-relay-bin.000015 Relay_Log_Pos: 51783830 Relay_Master_Log_File: mysql-bin.044002 Seconds_Behind_Master: 0
Репликация восстановлена.
Обсуждение
забыл mysql> reset slave;