Master-slave репликация mysql

Репликация данных Mysql позволяет иметь точную копию базы данных с одного сервера – master сервера на одном или нескольких других slave серверах . Такая репликация Mysql является асинхронной.
Что обозначает, что мастер сервер никак не контролирует и не знает читает ли лог файл ведомые сервера и делают ли они это верно.
Я буду использовать 2 сервера для репликации

1
172.10.10.2 - master
1
172.10.10.3 - slave

Step 1
В конфигурацию Master сервера mysql нужно внести несколько строк

1
2
3
Centos - /etc/my.cnf
Ubuntu/Debian - /etc/mysql/my.cnf
freebsd - /usr/local/etc/my.cnf

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

1
server-id = 1

путь к бинарному логу

1
log_bin = /var/log/mysql/mysql-bin.log

название Вашей базы данных, которая будет реплицироваться

1
binlog_do_db = basename

Перезапускаем Mysql:

1
/etc/init.d/mysql restart

или

1
service mysqld restart

step 2
Нужно на Master сервере создать пользователя с правами репликации
mysql -u root -p

1
2
GRANT REPLICATION SLAVE ON *.* TO 'userreplic'@'%' IDENTIFIED BY 'passwd';
FLUSH PRIVILEGES;

Заблокируем базу на время дампа и развертывания на другом сервере

1
2
USE basename;
FLUSH TABLES WITH READ LOCK;

И проверим статус Master сервера в дальнейшем нам потребуються даные с полей File и Position

1
SHOW MASTER STATUS;
1
2
3
4
5
6
7
mysql> SHOW MASTER STATUS;
+------------------+----------+----------------------------+------------------+
| File                              | Position         | Binlog_Do_DB               | Binlog_Ignore_DB |
+------------------+----------+----------------------------+------------------+
| <strong>mysql-bin.000099</strong> | <strong>106</strong> | basename |                  |
+------------------+----------+----------------------------+------------------+
1 row in set (0.00 sec)

step 3
Сделаем дамп базы на Master сервере

1
mysqldump -u root -p basename > basename.sql

и передадим его на Slave сервер

1
scp basename.sql root@172.10.10.3:/home/

step 4
Проведем работы на Slave сервере
создадим базу которая у нас будет реплицироваться

1
mysql -u root -p
1
CREATE DATABASE basename;

и загрузим дамп в новую базу

1
mysql -u root -p basename < basename.sql

step 5
Внесем изменения в my.cnf Slave сервера
ID Слейва, удобно выбирать следующим числом после Мастера

1
server-id = 2

Путь к relay логу

1
relay-log = /var/log/mysql/mysql-relay-bin.log

Путь к bin логу на Мастере

1
log_bin = /var/log/mysql/mysql-bin.log

База данных для репликации

1
binlog_do_db = basename

step 6
осталось включить репликацию. На Slave сервере запустите запрос

1
CHANGE MASTER TO MASTER_HOST='172.10.10.2', MASTER_USER='userreplic', MASTER_PASSWORD='passwd', MASTER_LOG_FILE = 'mysql-bin.000099', MASTER_LOG_POS = 106;

После этого запустите репликацю на slave сервере

1
START SLAVE;

ну и снять Lock таблиц на Master сервере

1
UNLOCK TABLES;