Настройка Master-Slave репликации в MySQL
Исходные данные
- Хост №1 (mysql1) - будущий master, ОС ALT Linux Sisyphus, СУБД MySQL 5.0, существующая база replica;
- Хост №2 (mysql2) - будущий slave, ОС ALT Linux Sisyphus, СУБД MySQL 5.0.
Требуется
Настроить репликацию базы replica на хосте mysql1 на хост mysql2 в режиме master-slave.Порядок действий
На хосте mysql1
В файле конфигурации MySQL (/var/lib/mysql/my.cnf
):- Отключаем параметр skip-networking
- Добавляем параметры:
server-id=1 log-bin=/log/bin.log binlog-do-db=replica binlog-ignore-db=mysql binlog-ignore-db=testПерезапускаем демона.
#service mysqld restartВ консоли MySQL создаём на master-хосте пользователя с полномочиями на репликацию:
$mysql -uroot -p mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave'; mysql> FLUSH PRIVILEGES; mysql> USE replica; mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; +------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------+----------+--------------+------------------+ | bin.000002 | 98 | replica | mysql,test | +------------+----------+--------------+------------------+Запоминаем параметры File и Position.
Далее создаём дамп реплицируемой базы:
$mysqldump -uroot -p replica > replica.dumpИ переносим этот дамп на slave-хост.
Внимание. Блокировка таблиц будет снята, если выйти из консоли MySQL. Для создания дампа базы и переноса его на slave-хост следует использовать другую пользовательскую сессию.
После выполнения всех операций на slave-хосте в консоли MySQL разблокируем таблицы:
mysql> UNLOCK TABLES;
На хосте mysql2
Создаём базу replica и наполняем её из дампа с master-хоста:$mysqladmin -uroot -p create replica $mysql -uroot -p replica < replica.dumpВ файле конфигурации MySQL (
/var/lib/mysql/my.cnf
):- Отключаем параметр skip-networking
- Добавляем параметры:
server-id=2 master-host=mysql1 master-user=slave_user master-password=slave master-connect-retry=60 replicate-do-db=replica relay-log=/log/slave-relay-bin relay-log-index=/log/slave-relay-bin.indexПерезапускаем демона.
#service mysqld restartЗатем запускаем процесс репликации в консоли MySQL (используя параметры File и Position с master-хоста):
$mysql -uroot -p mysql> SLAVE STOP; mysql> CHANGE MASTER TO -> MASTER_HOST='mysql1', -> MASTER_USER='slave_user', -> MASTER_PASSWORD='slave', -> MASTER_LOG_FILE='bin.000002', -> MASTER_LOG_POS=98; mysql> START SLAVE; mysql> SHOW SLAVE STATUS\GУбеждаемся в том, что параметры Slave_IO_Running и Slave_SQL_Running установлены в Yes.
Краткое резюме
В принципе репликация работает.Потенциальные проблемы:
- Если что-либо меняется на slave-хосте, то, естественно, на master-хост изменения перенесены не будут. К сожалению параметр read-only в конфигурации slave-hosta не срабатывает.
- Если что-то меняется в реплицируемой базе на master-хосте без использования явного подключения к ней (например, запросами вида "
DELETE FROM replica.test_table;
" без предварительной директивы "USE replica;
"), то такие изменения не реплицируются. (Теоретически возможно использование конфигурационного параметра вида replicate-wild-do-table=replica.%, однако так оно работать не захотело.)
mysql> LOAD DATA FROM MASTER;На данный момент, судя по всему, альтернативы переносу данных с помощью дампа не существует.
Комментариев нет:
Отправить комментарий