Как настроить MySQL Master-Slave репликацию
Master-Slave репликация в MySQL часто используется для обеспечения отказоустойчивости приложений. Кроме этого, она позволяет распределить нагрузку на базу данных между несколькими серверами (репликами).
Настройка репликации происходит в несколько шагов. Мы будем использовать два сервера с адресами:
Master сервер, 10.10.0.1
Slave сервер, 10.10.0.2
Шаг 1. Настройка Master
На сервере, который будет выступать в роли Master , необходимо внести правки в my.cnf
:
Выбираем ID сервера, произвольное число, лучше начинать с 1:
1 | server-id = 1 |
Путь к бинарному логу:
1 | log_bin = /var/log/mysql/mysql-bin.log |
Название базы данных, которая будет реплицироваться:
1 | binlog_do_db = newdatabase |
Перезапускаем Mysql:
1 | /etc/init.d/mysql restart |
Шаг 2. Права на репликацию
Далее необходимо создать профиль пользователя, из-под которого будет происходить репликация. Для этого запускаем консоль:
1 | mysql -u root -p |
Далее создаем и назначаем права пользователю для реплики.
Даем права пользователю slave_user
с паролем password
.
1 | GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password'; |
Далее блокируем все таблицы в нашей базе данных:
1 | USE newdatabase; |
Проверяем статус Master-сервера:
1 | SHOW MASTER STATUS; |
Наблюдаем что-то похожее на это:
Значения в File
и Position
мы будем использовать для запуска Slave
1 | mysql> SHOW MASTER STATUS; |
Шаг 3. Дамп базы
Теперь необходимо сделать дамп базы данных:
1 | mysqldump -u root -p newdatabase > newdatabase.sql |
Разблокируем таблицы в консоли mysql
:
1 | UNLOCK TABLES; |
Шаг 4. Создание базы на Slave
В консоли mysql
на Slave создаем базу с таким же именем, как и на Master:
1 | CREATE DATABASE newdatabase; |
После этого загружаем дамп (из-под консоли):
1 | mysql -u root -p newdatabase < newdatabase.sql |
Шаг 5. Настройка Slave
В настройках my.cnf
на Slave необходимо указать такие параметры:
(ID Slave-сервера, удобно выбирать следующим числом после Master-сервера)
1 | server-id = 2 |
Путь к relay
логу:
1 | relay-log = /var/log/mysql/mysql-relay-bin.log |
Путь к bin-логу на Master:
1 | log_bin = /var/log/mysql/mysql-bin.log |
База данных для репликации:
1 | binlog_do_db = newdatabase |
Шаг 6. Запуск Slave
Нам осталось включить репликацию, для этого необходимо указать параметры подключения к Master-серверу. В консоли mysql
на Slave необходимо выполнить запрос:
(указанные значения мы берем из настроек Master-сервера)
1 | CHANGE MASTER TO MASTER_HOST='10.10.0.1',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107; |
После этого запускаем репликацию на Slave-сервере:
1 | START SLAVE; |
Статус репликации
Проверить работу репликации на Slave можно запросом:
1 | mysql> SHOW SLAVE STATUS\G |