Иметь реплику БД даёт примерно такой профит:
В данном мане производится реплика всех баз, т.е. не выборочно какой либо одной базы, а даже тех, которые будут созданы в будущем.
Master это сервер с которого будут идти данные, он имеет IP:1.2.3.4
Заходим в /etc/mysql/my.cnf и в конфигурации [mysqld] указываем параметры:
# репликация - данный сервер мастер
server-id = 1# место хранения бинарных логов
log_bin = /var/log/mysql/log_bin# срок хранения, в днях, бинарных логов. Если установлено значение 0, бинарные логи не удаляются
expire_logs_days = 10# максимальный размер бинарного лог файла. При достижении размером файла, данного значения, будет открыт новый файл лога
max_binlog_size = 300M
В консоле подключаемся к MySQL:
mysql -u root -p
Добавляем юзера-репликатора для слейва, с помощью команд:
create user 'replicator'@'%' identified by 'Pa$$w0rd';
grant replication slave on *.* to 'replicator'@'%';
После чего рестартанём MySQL:
service mysql restart
Снова заходим в MySQL (подключаемся консольным клиентом) и выполняем запрос:
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 11716 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
как видите MySQL показывает статистику, в которой значение Position должно увеличиваться по мере того, как вносятся изменения в БД на мастере.
По умолчанию сервер MySQL принимает соединения только с локальной машины. Для того, чтобы разрешить подключаться к MySQL с других машин, замените строку
bind-address = 127.0.0.1
на
#разрешить подключатся с любого хоста bind-address = 0.0.0.0 #разрешить подключатся только с указанного IP bind-address = 192.168.1.23
Slave это сервер на который будут идти данные, он имеет IP:5.6.7.8
Заходим в /etc/mysql/my.cnf слэйва и в конфигурации [mysqld] указываем параметры:
server-id = 2 relay-log = /var/lib/mysql/relay-log relay-log-index = /var/lib/mysql/relay-log-index
После чего рестартанём MySQL:
service mysql restart
Дамп
На Master-сервере делаем дамп и разворачиваем его на Slave-сервере
Реплицируем данные
В консоле подключаемся к MySQL:
mysql -u root -p
и запускаем репликацию с помощью следующих команд:
change master to master_host = "1.2.3.4", master_user = "replicator", master_password="Pa$$w0rd", master_log_file = "mysql-bin.000001", master_log_pos = 11716;
start slave;
Проверим состояние Slave:
show slave status;
Увидим большую портянку, публиковать ее не буду, главное обратить внимание на отсутствие ошибок и если репликация идет нормально, на реплике номер лога в Master_Log_File и позиция Exec_Master_Log_Pos будут расти. Seconds_Behind_Master - время отставания реплики от мастера, если оно нулевое - значит все в порядке. Ну а если нет, то Slave не успевает воспроизводить действия с Master.