Репликация данных 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 |
Заблокируем базу на время дампа и развертывания на другом сервере
И проверим статус Master сервера в дальнейшем нам потребуються даные с полей File и Position
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 | 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 |
После этого запустите репликацю на slave сервере
1 | START SLAVE; |
ну и снять Lock таблиц на Master сервере
1 | UNLOCK TABLES; |