UpMark -  System of Professional Certification
UpMark - Система Сертификации Специалистов. Пройди тест - получи сертификат.   система
система тестирование
UpMark : Настройка репликации Master-Master в MySQL : Сделать стартовойСделать закладку
 Настройка репликации Master-Master в MySQL
Настройка репликации Master-Master между двумя базами данных (возможно, расположенных на разных серверах) позволяет поддерживать обе базы данных в актуальном состоянии. В любой момент имеется возможность подключиться к любой БД и продолжать работу.

Попробуем настроить данную репликацию на двух серверах.

Основной сервер пусть будет
SERVER1 с IP-адресом 33.33.33.1

Резервный сервер пусть будет
SERVER2 с IP-адресом 33.33.33.2

Настроим основной сервер

На SERVER1 заводим пользователя mysql (в нашем примере пользователь repl_user, пароль replpassword) с правами REPLICATION SLAVE, SELECT, RELOAD, SUPER

На SERVER2 тоже надо будет завести аналогичного пользователя. Для удобства - он будет заведен с тем же именем и паролем, что и на SERVER1

Там же, на SERVER1 открываем файл /etc/mysql/my.cnf, отключаем (комментируем) параметр skip-networking, если он есть.

В секции этого же файла вносим следующие изменения:

# IP-адрес сервера. Ставим реальный IP-адрес, чтобы сервер был виден с других серверов
bind-address = 33.33.33.1

# Идентификатор сервера. Ставим любое число, уникальное для каждого сервера участвующего в репликации
server-id = 1

# файл журнала, с которого будет считываться информация об изменениях в БД
log_bin = /var/log/mysql/mysql-bin.log

# Список баз данных, подлежащих репликации. Если реплицируются все базы - эти значения не нужны
binlog_do_db = mainbd
binlog_do_db = firm1
...
и т.д.

# Список баз данных, НЕ подлежащих репликации. Используется в том случае, если реплицироваться должны все остальные базы
binlog_ignore_db = phpmyadmin
binlog_ignore_db = information_schema
...
и т.д.


# IP-адрес и порт сервера, который будет забирать данные - в нашем случае SERVER2
master-host = 33.33.33.2
master-port = 3306

# Имя пользователя для репликации и пароль на SERVER2. Он заведен с тем же именем и паролем, что и на SERVER1
master-user = repl_user
master-password = replpassword

# Эти значения задаем, чтобы не было конфликтов с автоинкрементными полями.
# В данном случае - все автоинкрементные поля в базах данных на SERVER1 будут нечетными.
auto_increment_offset = 1
auto_increment_increment= 2

Делаем бэкап баз данных, которые необходимо реплицировать.

Настроим резервный сервер

На SERVER2 создаем базы данных, подлежащих репликации с бэкапа SERVER1

А дальше действуем почти аналогично.

На SERVER2 заводим пользователя mysql (для удобства - с тем же именем и паролем что и на SERVER1: repl_user/replpassword) с правами REPLICATION SLAVE, SELECT, RELOAD, SUPER

Там же, на SERVER2 открываем файл /etc/mysql/my.cnf, отключаем (комментируем) параметр skip-networking, если он есть.

В секции этого же файла вносим следующие изменения:

# IP-адрес сервера. Ставим реальный IP-адрес, чтобы сервер был виден с других серверов
bind-address = 33.33.33.2

# Идентификатор сервера. Ставим любое число, уникальное для каждого сервера участвующего в репликации
server-id = 2

# файл журнала, с которого будет считываться информация об изменениях в БД
log_bin = /var/log/mysql/mysql-bin.log

# Список баз данных, подлежащих репликации. Если реплицируются все базы - эти значения не нужны
binlog_do_db = mainbd
binlog_do_db = firm1
...
и т.д.


# Список баз данных, НЕ подлежащих репликации. Используется в том случае, если реплицироваться должны все остальные базы
binlog_ignore_db = phpmyadmin
binlog_ignore_db = information_schema
...
и т.д.


# IP-адрес и порт сервера, который будет забирать данные - в нашем случае SERVER1
master-host = 33.33.33.1
master-port = 3306

# Имя пользователя для репликации и пароль на SERVER1. Он заведен с тем же именем и паролем, что и на SERVER2
master-user = repl_user
master-password = replpassword

# Эти значения задаем, чтобы не было конфликтов с автоинкрементными полями.
# В данном случае - все автоинкрементные поля в базах данных на SERVER2 будут четными.
auto_increment_offset = 2
auto_increment_increment= 2

После проведенных изменений перезапускаем mysql на обоих серверах.

Теперь проверим, как будет идти репликация с SERVER1 на SERVER2

На SERVER2 запускаем SLAVE-режим командой

SLAVE START

После этого делаем команду

SHOW SLAVE STATUS

В результатах выполнения этой команды поля Slave_IO_Running и Slave_SQL_Running должны иметь значения Yes - в этом случае все настроено правильно.

Если же хотя бы одно из этих значений равно No - читаем ошибки результатах выполнения команды, и пытаемся исправить.

После перезапуска MASTER-а (в данном случае MASTER находится на SERVER1) Slave_IO_Running так же может быть равен No - в этом случае надо просто подождать одну-две минуты, после чего SLAVE настроится на новые (после перезапуска) параметры MASTER-а.

Если все в порядке, на SERVER1 производим любые изменения в БД, подлежащей репликации (например, добавим запись в таблицу) и проверяем, что эти же изменения произошли и на SERVER2

После успешной проверки репликации SERVER1 -> SERVER2, той же командой SLAVE START На SERVER1 тоже запускаем и проверяем SLAVE-режим.

Вносим изменения в БД на SERVER2, и проверяем, отразились ли они на SERVER1.

Если отразились - все в порядке, репликация настроена!

Кроме того, существует команда SHOW MASTER STATUS, которую можно запустить на MASTER-е и результаты работы которой сравнить с результатами работы команды SHOW SLAVE STATUS на SLAVE. При нормальной работе значения должны соответствовать друг другу, а сразу после перезапуска - они будут разные, пока SLAVE не настроится на новые параметры MASTER-а.

Изменить значения переменных (кроме изменения файла my.cnf и последующего перезапуска сервера mysql) для SLAVE можно командой CHANGE master TO:

CHANGE master TO
master_host = `33.33.33.1`,
master_user = `repl_user`,
master_password = `replpassword`,
master_log_file = `<файл из команды SHOW MASTER STATUS>`,
master_log_pos = <позиция из команды SHOW MASTER STATUS>;

Но ей пользоваться нужно осторожно. Если потребуется изменить значения в файле my.cnf - нужно сначала удалить файл master.info, где содержится информация о MASTER-е, и перезапустить mysql и только после этого значения переменных для доступа к MASTER-у из my.cnf будут прочитаны.

Автор: Роман Румянцев


Отзывы:
отзывов пока нет, ваш будет первым!

Оставьте свой отзыв:
Ваше имя:

Ваш отзыв о "Настройка репликации Master-Master в MySQL":

контрольный код:




Смотрите также:
  • Синонимы разнообразят язык
  • Что предлагают специальные программы учебы за границей
  • Тестирование школьников - распил бабла
  • Настройка репликации Master-Master в MySQL
  • Как найти специалистов по продвижению сайта

    Вы читали "Настройка репликации Master-Master в MySQL"
  •   

    © 2004—2019 UpMark ltd
    регистрация  |  тесты  |  библиотека  |  контакты