Spec-Zone.ru › MariaDB

Настройка репликации

Термины 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

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
  • Репликация и внешние ключи
  • Репликация как резервное решение
  • Репликация с нескольких источников
  • Глобальный идентификатор транзакции
  • Параллельная репликация
  • Параметры сервера репликации и двоичного журнала
  • Статусные параметры репликации и двоичного журнала
  • Полусинхронная репликация
  • Отложенная репликация
  • Совместимость репликации
Содержимое, воспроизводимое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом контенте, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API