Полная версия

OSS Group


Авторизация

  

Навигация

Текущее местоположение:  OSS Group :: Wiki :: Admin :: Настройка Master-Master репликации в MySQL
Главное меню:   Главная   Документация   Разработка   Контакты   Поиск   Карта сайта   Wiki   Блоги
Разделы Wiki:   Admin  APT  Sandbox

Настройка Master-Master репликации в MySQL

Исходные данные

  1. Хост №1 (mysql1) - будущий master1 и slave2, ОС ALT Linux Sisyphus, СУБД MySQL 5.0, существующая база replica;
  2. Хост №2 (mysql2) - будущий slave1 и master2, ОС ALT Linux Sisyphus, СУБД MySQL 5.0.

СУБД на обоих хостах запущены и работают.

Требуется

Настроить репликацию базы replica на хосте mysql1 на хост mysql2 в режиме master-master.

Порядок действий

На хосте mysql1

В файле конфигурации MySQL (/var/lib/mysql/my.cnf):

  1. Отключаем параметр skip-networking
  2. Добавляем параметры:
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-хосте №1 пользователя с полномочиями на репликацию:

$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

И переносим этот дамп на master-хост №2.

Внимание. Блокировка таблиц будет снята, если выйти из консоли MySQL. Для создания дампа базы и переноса его на master-хост №2 следует использовать другую пользовательскую сессию.

На хосте mysql2

Создаём базу replica и наполняем её из дампа с master-хоста №1:

$mysqladmin -uroot -p create replica
$mysql -uroot -p replica < replica.dump

В файле конфигурации MySQL (/var/lib/mysql/my.cnf):

  1. Отключаем параметр skip-networking
  2. Добавляем параметры:
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
auto_increment_increment=2
auto_increment_offset=2

Перезапускаем демона.

#service mysqld restart

Затем запускаем процесс репликации в консоли MySQL (используя параметры File и Position с master-хоста №1):

$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.

На данном этапе, фактически была настроена Master-Slave репликация базы replica с хоста mysql1 на хост mysql2.

Далее, в файл конфигурации MySQL (/var/lib/mysql/my.cnf) добавляем параметры:

log-bin=/log/bin.log
binlog-do-db=replica

Перезапускаем демона.

#service mysqld restart

В консоли MySQL создаём на master-хосте №2 пользователя с полномочиями на репликацию:

$mysql -uroot -p replica

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave';
mysql> FLUSH PRIVILEGES;
mysql> SHOW MASTER STATUS;

+------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------+----------+--------------+------------------+
| bin.000006 |       98 | replica      | mysql,test       |
+------------+----------+--------------+------------------+

Запоминаем параметры File и Position.

Возвращаемся к хосту mysql1

В консоли MySQL разблокируем ранее блокированные таблицы:

mysql> UNLOCK TABLES;

В файл конфигурации MySQL (/var/lib/mysql/my.cnf) добавляем параметры:

master-host=mysql2
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
auto_increment_increment=2
auto_increment_offset=1

Перезапускаем демона.

#service mysqld restart

Затем запускаем процесс репликации в консоли MySQL (используя параметры File и Position с master-хоста №2):

$mysql -uroot -p

mysql> SLAVE STOP;
mysql> CHANGE MASTER TO
    -> MASTER_HOST='mysql2',
    -> MASTER_USER='slave_user',
    -> MASTER_PASSWORD='slave',
    -> MASTER_LOG_FILE='bin.000006',
    -> MASTER_LOG_POS=98;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G

Убеждаемся в том, что параметры Slave_IO_Running и Slave_SQL_Running установлены в Yes.

Краткое резюме

В принципе репликация работает. Каких-то проблем в процессе работы не замечено.

Дополнительные источники информации


Дата создания: 2007-10-08 16:22:26 (Фетисов Ф. А. (faf))
Последнее изменение: 2007-10-08 16:25:23 (Фетисов Ф. А. (faf))
Владелец: Фетисов Ф. А. (faf)
Версия: 2  Все версии


  Не показывать комментарии


Wiki::Admin   Карта раздела  Оглавление  Изменения за сутки  Изменения за неделю  Изменения за месяц



Быстрый поиск по Wiki:
И ИЛИ

На эту страницу ссылаются:

©2006-2024 OSS Group. All rights reserved. | Техническая поддержка: Открытые Информационные Технологии и Системы