Восстановление реплики mysql с другой реплики

Задача: создать реплику(р2) базы MYSQL, используя другую ее реплику(р1). То есть обе реплики должны использовать одного мастера(м). При этом мастер нельзя останавливать.

Базы используют MYISAM.

Решение:  На самом деле, задача тривиальная, если знать, что как работает.

В начале — остановим реплику и блокируем базу:

mysql [(none)]> stop slave;
Query OK, 0 rows affected (0.22 sec)

mysql [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.05 sec)

mysql [(none)]> SET GLOBAL read_only = ON;
Query OK, 0 rows affected (0.00 sec)

mysql [(none)]>

Смотрим позицию:

mysql [(none)]>show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Queueing master event to the relay log
                  Master_Host: xx.xx.xx.xx
                  Master_User: repl_user
                  Master_Port: 3306
                Connect_Retry: 5000
              Master_Log_File: mysql-bin.036325
          Read_Master_Log_Pos: 37257087
               Relay_Log_File: magnus-relay-bin.074298
                Relay_Log_Pos: 233489758
        Relay_Master_Log_File: mysql-bin.036293
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: dball.%
  Replicate_Wild_Ignore_Table: mysql.%
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 233489612
              Relay_Log_Space: 10418186127
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 5856
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 30
1 row in set (0.00 sec)

ERROR: 
No query specified

В данном случае, нам нужна позиция мастера, от которого работает текущая реплика(р1), это параметры: relay_master_log_file и exec_master_log_pos. Запоминаем их.

Далее делаем дамп базы с р1 на р2, тут уж кто как любит, в данном случае, мне проще снапшотом:)

Так же рекомендуется на р2 выполнить команду RESET SLAVE; для корректности.

Скопировав базу на р2, нужно запустить процесс репликации, командой:

CHANGE MASTER TO MASTER_HOST = 'xx.xx.xx.xx', MASTER_USER = 'repl_user', MASTER_PASSWORD = 'blablabla', MASTER_CONNECT_RETRY = 5000, MASTER_LOG_FILE = "mysql-bin.036293", MASTER_LOG_POS = 233489612;

Далее START SLAVE;

все =) не забудьте запустить реплику на р1.