воскресенье, 24 апреля 2011 г.

Master-Slave репликация в MySQL

Это самый простейший случай масштабирования: один ведущий сервер и один ведомый. В этом случае все обновления пишутся на ведущий (master) и реплицируются на ведомый (slave).
Репликация в mysql работает следущим образом: ведущий логирует все измения базы в двоичный лог, ведомый подключаясь в ведущему выгружает этот самый лог и затем выполняет его.
Настройка репликции в общем случае состоит из нескольких этапов

  1. Включение двоичного лога на мастере
  2. Создание пользователя на мастере для подключения слейва
  3. Назначение уникальных server-id
  4. Первичная синхронизация данных
  5. Установка переменных MASTER_* на слейве
  6. Запуск и мониторинг репликации
Включение двоичного лога на мастере


log_bin                         = /var/log/mysql/mysql-bin.log
relay-log                         = /var/log/mysql/relay.log

expire_logs_days                = 5
max_binlog_size                 = 100M
binlog_ignore_db                = information_schema


Эти строки нужно внести в my.cnf. На ведомом это не обязательно, но весьма желательно, поскольку не исключена ситуация, что он статет ведущим. Кроме того, двоичные логи могут пригодиться для восстановления данных.
Создание пользователя на мастере для подключения слейва
Это просто:

> GRANT REPLICATION CLIENT ON *.* TO repl@"%" IDENTIFIED BY '';
 
Назначение уникальных server-id
Это обязательный шаг. У всех связанных серверов должны быть уникальные идентификаторы


Установка переменных MASTER_* на слейве
Нужно установить параметры подключения к мастеру на слейве:
> CHANGE MASTER TO MASTER_HOST='4.4.4.4', MASTER_USER='repl', MASTER_PASSWORD='password';


 Первичная синхронизация данных
 Самый простой способ - сделать дамп с параметром --master-data, тогда в него будет включена информация об имени файла лога и позиции в нем. Но для обеспечения целостности данных необходимо заблокировать все таблицы:

>FLUSH TABLES WITH READ LOCK;
И не закрывая консоли:
# mysqldump --all-databases --single-transaction --master-data > mysql.sql
По завершению дампа нужно разблокировать таблицы:
>UNLOCK TABLES;
Либо просто выйти из консоли.
Далее этот файл нужно перенести на слейв и загрузить его в базу
mysql -u root -p < mysql.sql
Запуск и мониторинг репликации
Репликация запускается запросом
> SLAVE START;
Ее состояние запросом
> SHOW SLAVE STATUS\G

1 комментарий:

  1. в Назначение уникальных server-id
    Это обязательный шаг. У всех связанных серверов должны быть уникальные идентификаторы

    лучше добавить

    server-id = 1 # на master

    server-id = 2 # на слейве

    ОтветитьУдалить