Восстановление реплики 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.
Покажите пожалуйста настройки р1 и р2 в области настроек реплики master/slave.
Реплика р1 в основном интересна.
Спасибо!
Владимир, собственно, там ничего сверхъестественного.
На обоих серверах указывается id сервера, причем на мастере — ниже, чем на слейве. Так же на мастере желательно указать куда писать бин логи. Вроде бы с версии 5,1 по умолчанию используется режим бинлогов «MIXED», но я его всегда прописываю. Можно еще указать — сколько дней хранить логи и предельный размер файлов.
вот пример:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = MIXED
expire_logs_days = 3
max_binlog_size = 100M
Пример в статье — собирался на тестовой машине, и исходный конфиг я сейчас не покажу. Продакшен конфиги показывать не буду — там слишком частный случай, да и не стоит их выкладывать(конфиденциальность, епть, я же не один работаю)
Все понял. Спасибо. Вообще изначально не правильно прочитал шапку. Я хочу создать реплику реплики, а не просто восстановить с реплики.