Настройка репликации
Термины master и slave исторически использовались при репликации, но теперь предпочтительнее термины primary и replica. Старые термины по-прежнему используются в некоторых частях документации и в командах MariaDB, хотя MariaDB 10.5 начала процесс переименования. Процесс документации продолжается. Следите за прогрессом этой работы на MDEV-18777.
Для настройки репликации требуются действия как на сервере/серверах master, так и на сервере/серверах slave.
MariaDB 10.0 ввела репликацию с использованием глобальных идентификаторов транзакций. Это имеет ряд преимуществ, и рекомендуется использовать эту функцию начиная с MariaDB 10.0.
Настройка репликации slave с использованием Mariabackup
Если вы хотите использовать Mariabackup для настройки репликации slave, то информация на странице Настройка репликации Slave с Mariabackup может быть полезной.
Версии
В общем случае при репликации между различными версиями MariaDB предпочтительно, чтобы master был более старой версии, чем slave. Версии MariaDB обычно обратно совместимы, но, конечно, более старые версии не всегда совместимы с более новыми. См. также Репликация с MySQL master на MariaDB slave.
Настройка master
- Включите двоичное протоколирование, если оно ещё не включено. Подробнее см. Активация двоичного журнала и Форматы двоичного журнала.
- Назначьте master уникальный server_id. Всем slave также необходимо назначить server_id. Это может быть число от 1 до 232-1, и оно должно быть уникальным для каждого сервера в группе репликации.
- Укажите уникальное имя для ваших журналов репликации с помощью параметра --log-basename. Если этот параметр не указан, будет использовано имя хоста, и возникнут проблемы, если имя хоста изменится.
- Slave потребуются разрешения на подключение и запуск репликации с сервера. Обычно это делается путём создания специального пользователя slave и предоставления этому пользователю разрешений только на репликацию (разрешение REPLICATION SLAVE).
Пример включения репликации для MariaDB
Добавьте следующее в ваш файл my.cnf и перезапустите базу данных.
[mariadb] log-bin server_id=1 log-basename=master1 binlog-format=mixed
Идентификатор сервера — это уникальное число для каждого сервера MariaDB/MySQL в вашей сети. binlog-format определяет, как регистрируются ваши операторы. Это главным образом влияет на размер двоичного журнала, который передаётся между Master и Slave.
Затем выполните следующий SQL-запрос с помощью mysql командной строки:
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'bigs3cret'; GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
Пример включения репликации для MySQL
Если вы хотите включить репликацию с MySQL на MariaDB, вы можете сделать это практически так же, как между серверами MariaDB. Основное отличие состоит в том, что MySQL не поддерживает log-basename.
[mysqld] log-bin server_id=1
Параметры, которые необходимо проверить
Существует ряд параметров, которые могут повлиять или нарушить репликацию. Проверьте следующие параметры, чтобы избежать проблем.
-
skip-networking. Если
skip-networking=1, сервер будет ограничивать подключения только к localhost и не позволит всем удалённым slave подключаться. - bind-address. Аналогично, если адрес, к которому сервер прослушивает подключения TCP/IP, равен 127.0.0.1 (localhost), подключения удалённых slave будут неудачными.
Настройка slave
- Назначьте slave уникальный server_id. Всем серверам, как master, так и slave, назначается server_id. Это может быть число от 1 до 232-1, и оно должно быть уникальным для каждого сервера в группе репликации. Для того, чтобы изменения в этом параметре вступили в силу, необходимо перезапустить сервер.
Получение координат двоичного журнала master
Теперь вам необходимо предотвратить любые изменения данных во время просмотра двоичного журнала. Вы будете использовать эти данные, чтобы указать slave, с какой точки он должен начать репликацию.
- На master заблокируйте все таблицы, выполнив команду
FLUSH TABLES WITH READ LOCK. Удерживайте это подключение открытым — закрытие подключения разблокирует таблицы. - Получите текущую позицию в двоичном журнале, выполнив команду
SHOW MASTER STATUS:
SHOW MASTER STATUS; +--------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+------------------+ | master1-bin.000096 | 568 | | | +--------------------+----------+--------------+------------------+
- Запишите детали Файл и Позиция. Если двоичное протоколирование только что было включено, эти значения будут пустыми.
- Теперь, пока блокировка всё ещё активна, скопируйте данные с master на slave. Подробности о том, как это сделать, см. в разделе Резервное копирование, восстановление и импорт.
- Важно для баз данных в режиме реального времени: Вам просто нужно сделать локальную копию данных, вам не нужно держать master заблокированным до тех пор, пока slave не импортирует данные.
- После копирования данных вы можете снять блокировку с master, выполнив UNLOCK TABLES.
UNLOCK TABLES;
Запуск slave
- После импорта данных вы готовы начать репликацию. Начните с выполнения CHANGE MASTER TO, убедившись, что MASTER_LOG_FILE соответствует файлу и MASTER_LOG_POS позиции, полученным в результате выполнения SHOW MASTER STATUS ранее. Например:
CHANGE MASTER TO MASTER_HOST='master.domain.com', MASTER_USER='replication_user', MASTER_PASSWORD='bigs3cret', MASTER_PORT=3306, MASTER_LOG_FILE='master1-bin.000096', MASTER_LOG_POS=568, MASTER_CONNECT_RETRY=10;
Если вы запускаете slave на новом master, который был настроен для репликации с самого начала, то вам не нужно указывать MASTER_LOG_FILE и MASTER_LOG_POS.
Использование глобального идентификатора транзакции (GTID)
MariaDB 10.0 ввела глобальные идентификаторы транзакций (GTID) для репликации. Рекомендуется использовать (GTID) начиная с MariaDB 10.0, так как это имеет ряд преимуществ. Всё, что нужно, — это добавить параметр MASTER_USE_GTID к команде CHANGE MASTER , например:
CHANGE MASTER TO MASTER_USE_GTID = slave_pos
Полное описание см. в разделе Глобальный идентификатор транзакции.
- Теперь запустите slave с помощью команды
START SLAVE:
START SLAVE;
- Проверьте работу репликации, выполнив команду
SHOW SLAVE STATUS:
SHOW SLAVE STATUS \G
- Если репликация работает правильно, значения
Slave_IO_RunningиSlave_SQL_Runningдолжны бытьYes:
Slave_IO_Running: Yes Slave_SQL_Running: Yes
Репликация с MySQL master на MariaDB slave
- Репликация с MySQL 5.5 на MariaDB 5.5+ должна работать. При использовании MariaDB 10.2+ в качестве slave может потребоваться установить binlog_checksum в значение NONE.
- Репликация с MySQL 5.6 без GTID на MariaDB 10+ должна работать.
- Репликация с MySQL 5.6 с GTID, binlog_rows_query_log_events и игнорируемыми событиями работает начиная с MariaDB 10.0.22 и MariaDB 10.1.8. В этом случае MariaDB удалит MySQL GTID и другие ненужные события, а вместо этого добавит свои собственные GTID.
См. также
- Различия между базами данных statement-based, mixed и row logging
- Репликация и внешние ключи
- Репликация как резервное решение
- Репликация с нескольких источников
- Глобальный идентификатор транзакции
- Параллельная репликация
- Параметры сервера репликации и двоичного журнала
- Статусные параметры репликации и двоичного журнала
- Полусинхронная репликация
- Отложенная репликация
- Совместимость репликации
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/setting-up-replication/