Настройка репликации Master-Slave в MySQL
Термин репликация используется для обозначения механизма синхронизации нескольких копий данных, что повышает сохранность информации, отказоустойчивость и производительность системы. Ярким примером служит репликация базы данных между двумя серверами.
Master-Slave репликация MySQL
В терминологии Master-Slave мастером является первичный сервер с базой данных, на нем производится запись в базу, но чтение распределяется между мастером и слейвом в зависимости от нагрузки на систему, что повышает отказоустойчивость и производительность. Кроме того, благодаря такому подходу, копия базы данных всегда под рукой и ее можно восстановить в случае отказа одного из серверов.
В каких ситуациях может понадобится slave-сервер? Например, когда поступает большой массив данных для записи в базу и master-сервер просто не успевает выполнять чтение и клиенту приходится ждать окончания записи, чего можно избежать благодаря slave-серверу.
Возможны ситуации, когда мастер-сервер выходит из строя, в этом случае слейв-сервер подхватывает все функции мастера и работает в одиночку до его восстановления. Клиент скорее всего ничего не заметит, и уж точно не будет час-два-три ждать пока починят мастера.
Репликацию настроить совсем не сложно, благо механизм заложен в MySQL с самого начала.
Настройка на Master сервере
Начнем с редактирования файла конфигурации my.cnf, который чаще всего расположен по адресу /etc/mysql/my.cnf. Необходимо найти и раскомментировать(убрать #), либо прописать такие строки.
bind-address = 0.0.0.0 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log
Важно! Если bind-address уже был прописан, его нужно поменять, иначе не получится установить подключение между серверами.
Сразу после этого рестартуем базу данных на сервере.
/etc/init.d/mysql restart
Теперь необходимо создать пользователя с правами на репликацию нашей базы данных, сделать это можно из-под рута в консоли MySQL с помощью команды
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password'; FLUSH PRIVILEGES;
Где вместо «slave_user» и «slave_password» нужно написать логин и пароль для слейва.
Теперь посмотрим данные о мастере
SHOW MASTER STATUS;
Значения столбцов File и Position нужно запомнить, они будут использованы в настройке слейва, к чему мы сейчас и переходим.
Настройка на Slave сервере
Первым делом необходимо создать базу данных с таким же именем, как у той, которую мы собираемся реплицировать. Это важный шаг, нельзя им пренебрегать. Далее переходим в уже знакомый нам файл конфигурации my.cnf и пишем настройки.
server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log bin-log = /var/log/mysql/mysql-bin.log
Важно! В bin-log прописывается путь к бин-логу на местер сервере. Идентификатор сервера должен отличаться от айди мастера, удобно ставить его на 1 больше.
Далее необходимо настроить подключение к мастеру и включить slave-режим.
CHANGE MASTER TO MASTER_HOST='1.1.1.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107; START SLAVE;
Где host — ip адрес мастер, логин и пароль соответствуют тем, что мы создали на мастере, master_log_file и master_log_pos заполняются информацией из последнего пункта настройки мастер-сервера.
С этого самого момента все изменения в базе данных будут передаваться с мастера на слейва.
Проверка статуса репликации
Кроме команды SHOW MASTER STATUS; есть аналогичная для слейва SHOW SLAVE STATUS\G, которая выведет таблицу с информацией. Главный признак того, что сервера соединились и корректно работают — наличие таких строк
Slave_IO_Running: Yes Slave_SQL_Running: Yes