Настройка репликации MySQL

Репликация MySQL позволяет повысить уровень отказоустойчивости приложения, а так же позволяет распределить нагрузку между серверами баз данных MySQL или MariaDB.

Как работает репликация MySQL

Для создания репликации необходимо, как минимум, 2 сервера. Один из них будет являться master-сервером, а второй (и другие) — slave. При выполнении операций в базе данных на master сервере, она записывает всю информацию в специальный файл — binlog. А slave сервер, в свою очередь, подключается к master серверу, сравнивает значения и если появляется новая информация — выполняет ее у себя в базе данных.

Пример настройки репликации

Для примера, мы возьмем 2 сервера. Устанавливать будем на примере Debian GNU/Linux. Настройка везде примерно одинакова за исключением того, что файл my.cnf в Debian (Ubuntu) находится в директории /etc/mysql/, а в CentOS — просто в /etc/.

Адреса серверов:

  • Master-сервер — 192.168.0.1
  • Slave-сервер — 192.168.0.2

Настраиваем Master-сервер.

Для начала, нужно открыть файл my.cnf и указываем следующее:

# выбираем ID сервера, произвольное число, лучше начинать с 1
server-id = 1

# путь к бинарному логу
log_bin = /var/log/mysql/mysql-bin.log

# название базы данных, реплика которой необходима
binlog_do_db = websitedb

Затем, перезапускаем сервер MySQL командой

/etc/init.d/mysql restart

Затем, нам нужно выдать пользователю права на репликацию. Подключаемся к серверу под пользователем root:

mysql -u root -p

Добавляем необходимые права для пользователя slave_user (владельца нашей базы websitedb) и задаем ему пароль password:

GRANT REPLICATION SLAVE ON *.* TO ‘slave_user’@’%’ IDENTIFIED BY ‘password’;
FLUSH PRIVILEGES;

Затем, нам нужно заблокировать все таблицы от всех изменений:

USE websitedb;
FLUSH TABLES WITH READ LOCK;

Затем, нам нужно проверить статус работы Master-сервера с помощью команды:

SHOW MASTER STATUS;

Если все сделано верно, Вы увидите сообщение с именем файла, с названием вида:

mysql-bin.000001

А так же запомните значение из столбца Position. В нашем случае, это 10.
Это имя нам потребуется при создании и запуска слейв-сервера.

Делаем свежий дамп базы данных:

mysqldump -u root -p websitedb > websitedb.sql

Копируем файл на слейв-сервер и на мастере подключаемся к MySQL еще раз под root’ом и выполняем команду, чтобы разблокировать таблицы:

UNLOCK TABLES;

Создаем базу на Slave-сервере

Для того, чтобы работало все корректно, на слейв сервере необходимо создать базу с таким же именем. Подключаемся к MySQL на слейв-сервере и создаем базу:

CREATE DATABASE websitedb;

И заливаем наш дамп, который мы уже скопировали командой:

mysql -u root -p websitedb < websitedb.sql

Настройка Slave-сервера

Открываем файл my.cnf и указываем следующие параметры:

# ID сервера, будет удобно выбирать следующим числом после Master
server-id = 2

# Путь к relay логу
relay-log = /var/log/mysql/mysql-relay-bin.log

# Путь к bin логу на Мастере
log_bin = /var/log/mysql/mysql-bin.log

# База данных для репликации
binlog_do_db = websitedb

И перезапускаем сервер MySQL командой

/etc/init.d/mysql restart

Запуск Slave сервера

Все сделано, осталось самое главное — подключить Slave сервер к мастеру. Подключаемся к MySQL под root’ом и выполняем следующую команду:

CHANGE MASTER TO MASTER_HOST=’192.168.0.1′, MASTER_USER=’slave_user’, MASTER_PASSWORD=’password’, MASTER_LOG_FILE = ‘mysql-bin.000001’, MASTER_LOG_POS = 10;

Здесь мы вставляем номер из столбца Position (в нашем случае, это было число 10) и название binlog файла — mysql-bin.000001

И теперь стартуем слейв сервер командой в консоли MySQL:

START SLAVE;

Проверить работу на мастер сервере можно командой в MySQL консоли:

SHOW MASTER STATUS\G;

А на слейв-сервере, соответственно:

SHOW SLAVE STATUS\G;

Под настройку репликации мы рекомендуем выделенные сервера купить в аренду у нашей компании. Мы поможем с настройкой и поддержкой Ваших баз данных MySQL и MariaDB.

Если у вас возникли вопросы или трудности в настройках — вы можете в любое время обратиться за помощью к специалистам хостинга RigWEB. Мы будем рады вам помочь!

Добавить комментарий

Ваш адрес email не будет опубликован.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.