Настройка мастера MySQL
Настройку сервера мастера MySQL-master начнем с изменения файла конфигурации /usr/local/etc/my.cnf
Укажем уникальный SERVER-ID сервера (это обязательно!), путь к бинарным логам и имя базы данных для репликации в секции [mysqld]:
Server-id = 1 |
Для нормальной работы необходимо иметь достаточно места в разделе где у вас будут лежать бинарные логи.
Создаем пользователя replication с правами «replication slave», под ним будет производится репликация.
master-server@root>GRANT replication slave ON *.* TO "replication"@"192.168.30.5" IDENTIFIED BY "password"; |
Для принятия изменений перезагрузим MySQL сервер:
master-server@root#service mysql-server restart |
Если все прошло успешно, команда «show master status» покажет:
master-server@root> SHOW MASTER STATUS\G |
Значение position должно увеличиваться по мере того, как вносятся изменения в базу на мастере.
Настройка реплики MySQL
Укажем также SERVER-ID сервера, имя базы для репликации и путь к relay-бинлогам в секции [mysqld] конфигурационного файла, потом перезагрузим MySQL:
Server-id = 2 |
slave-server@root#service mysql-server restart |
Переносим данные
Для начала залочим базу для записи. Для этого можно либо остановить работу приложений, либо установить флаг read_only на мастере. Если у нас есть таблицы MyISAM, сделаем также «flush tables»:
master-server@root> FLUSH TABLES WITH READ LOCK; |
Посмотрим состояние мастера командой «show master status» и запомним значения File и Position (после успешной блокировки мастера они не должны изменятся):
File: mysql-bin.000005 |
Делаем дамп БД, и после завершения операции снимаем блокировку таблиц мастера:
master-server@root> SET GLOBAL read_only = OFF; |
Переносим дамп на реплику и восстанавливаем из него данные.
В завершении запускаем репликацию командами «change master to» и «start slave» и проверяем статус:
slave-server@root> CHANGE MASTER TO MASTER_HOST = "192.168.30.31", MASTER_USER = "replication", MASTER_PASSWORD = "password", MASTER_LOG_FILE = "mysql-bin.000005", MASTER_LOG_POS = 88; slave-server@root> start slave; |
Значения MASTER_LOG_FILE и MASTER_LOG_POS неоходимо брать с мастера.
Проверим как идет репликация:
slave-server@root> SHOW SLAVE STATUS\G |
Значения «Slave_IO_Running: Yes» и «Slave_SQL_Running: Yes» — говорит о том, что репликация идет успешно.
P.S.
Если появится ошибка:
1.
ERROR 1201 at line 1: Could not initialize master info |
Тогда пробуем на реплике выполнить следующие команды:
stop slave; |
2. Ошибка связанная с переполнением раздела
Когда бинарные логи переполняют раздел файловой системы, то необходимо почистить эти логи командами:
show binary logs; |