Есть несколько причин для ведения репликации баз данных:

  1. Производительность и масштабируемость. Один сервер может не справляться с нагрузкой, вызываемой одновременными операциями чтения и записи в БД. Выгода от создания реплик будет тем больше, чем больше операций чтения приходится на одну операцию записи в вашей системе.
  2. Отказоустойчивость. В случае отказа реплики, все запросы чтения можно безопасно перевести на мастера. Если откажет мастер, запросы записи можно перевести на реплику (после того, как мастер будет восстановлен, он может принять на себя роль реплики).
  3. Резервирование данных. Реплику можно «тормознуть» на время, чтобы выполнить mysqldump, а мастер — нет. (Существует способ hotcopy баз данных MySQL !!!ссылка!!!)

Начнем. Для примера введем некоторые данные: IP-адрес мастера 192.168.1.1, реплики — 192.168.1.2. На мастере прописываем настройки для MySQL (/etc/my.cnf)

server-id = 1
log-bin = /var/lib/mysql/mysql-bin 

Добавляем пользователя, через которого будет производиться репликация:

GRANT replication slave ON *.* TO "replic"@"192.168.1.2" IDENTIFIED BY "somepasswd";

Перезагружаем Mysql, чтобы применить настройки:

service mysqld restart

Для создания реплики нужно снять текущий дамп бд с мастера, для этого нужно на время снятия дампа не изменять данные бд, т.е. либо закрыть к mysql все доступы, либо ставим режим чтения:

SET GLOBAL read_only = ON;

Далее заходим в консоль Mysql и вводим команду:

SHOW MASTER STATUS\G;

На выходе должно быть следующее: File: mysql-bin.000004 Position: 981 Binlog_Do_DB: Binlog_Ignore_DB: Нас интересуют выделенные параметры, запомните их, они нам понадобятся при создании реплики. Если пусто, значит сервер не работает в режиме мастера, проверьте настройки. Снимаем дамп любым удобным для вас способом и восстанавливаем его на реплике. Настраиваем MySQL на реплике (/etc/my.cnf):

server-id = 2

Перезагружаем MySQL для применения настроек. Заходим в консоль MySQL и прописываем настройки для подключения к мастеру.

CHANGE MASTER TO MASTER_HOST = "192.168.1.11", MASTER_USER = "replic", MASTER_PASSWORD = "somepasswd", MASTER_LOG_FILE = "mysql-bin.000004", MASTER_LOG_POS = 981;

start slave;

Репликация настроена. Для просмотра статуса используем следующую команду:

SHOW SLAVE STATUS\G;

Комментарии ()