Настройка репликации master-slave в MYSQL
02.07.2016
Если нужно синхронизировать несколько баз MySql, то так чтобы одна база была основной, а другая полностью ее копировала, то эта заметка для Вас.
Действия делятся на те, которые нужно выполнить на Матере (основной базе, с который будет сниматься корпия) и на те, которые нужно делать на Слейве (в данном примере рассматривается, что копия у нас будет только одна, но на практике их может быть несколько).
На Мастере
- Нужно в конфигурационный файл mysql (/etc/my.cnf) в секцию "mysqld" добавить:
- где db_test1 и db_test2 названия баз, которые нужно реплицировать
[mysqld] bind-address = 0.0.0.0 log_bin server_id = 1 expire_logs_days = 5 max_binlog_size = 1000M binlog_do_db = db_test1 binlog_do_db = db_test2
- Далее нужно, через консоль, добавить пользователя slave:
- PASSWORD нужно указать свой
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'PASSWORD'; FLUSH PRIVILEGES;
- Затем блокируем таблицы и получаем информацию для репликации. Важно: эти данные нам понадобятся на Слейве.
– будет выведено что-то похожее на:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 113 | db_test1, db_test2 | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
- Делаем дамп:
mysqldump -p --single-transaction --quick --lock-tables=false --insert-ignore --all-databases > data-for-replica.sql
- Снимаем блокировку:
UNLOCK TABLES;
- Далее нужно перенести дамп на Слейв. Например, так:
scp data-for-replica.sql.gz USER@192.168.1.2:/home
Теперь переходим к настройке Слейва
- Добавляем в my.cnf:
server_id = 2
- Заливаем дамп:
mysql -p < data-for-replica.sql
- Включаем репликацию (команды выполняются из консоли mysql ):
где master_ip – IP сервера с которого будут скачиваться данные. PASSWORD – пароль для пользователя slave, который задавали в пункте 2 первой части. Данные для mysql-bin.000001 и 113 нужно брать из шага 3 первой части.
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='slave', MASTER_PASSWORD='PASSWORD', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=102; START SLAVE;
- Проверяем, все ли работает:
SHOW SLAVE STATUS\G