MariaDB
В качестве рекомендуемого решения предлагается использовать резервирование MariaDB, которая поддерживает режим репликации Master-Master.
Репликация Master-Master БД MariaDb
Для настройки репликации необходимо выполнить следующие шаги.
На первом сервере:
- В секцию [mysqld] конфигурационного файла БД MariaDB добавить следующие настройки:
sql-mode = "ANSI_QUOTES"
datadir = путь к данным
server-id = 1
log-bin = bin-log
bind-address = 0.0.0.0
auto_increment_increment = 2
auto_increment_offset = 1
- Перезапустить службу БД MariaDB, выполнив в терминале команду:
Для linux:
systemctl restart mariadb
Для windows:net start mariadb
- Установить соединение с БД MariaDB, выполнив в тер минале команду:
mysql -u root –p
, где root – пользователь, а после ключа -p пароль (если был указан) - Создать пользователя, который будет ответственен за репликацию БД MariaDB, выполнив в терминале команды:
create user 'replication_user'@'%' identified by 'replication_user';
grant replication slave on *.* to 'replication_user'@'%';
- Проверить состояние бинарного лога, выполнив в терминале команду:
show master status;
Значение полейPosition
иFile
будут использоваться для конфигурации репликации на втором сервере.
| File | Position
| mariadb-bin.000001 | 314
На втором сервере:
- В секцию [mysqld] конфигурационного файла БД MariaDB добавить следующие настройки:
sql-mode = "ANSI_QUOTES"
datadir = путь к данным
server-id = 2
log-bin = bin-log
bind-address = 0.0.0.0
auto_increment_increment = 2
auto_increment_offset = 2
- Выполнить пункты 2-4 аналогично первому серверу.
- Остановить репликацию, выполнив в терминале команду:
stop slave;
- Настраиваем репликацию, указав второму серверу, где нужно искать файл журнала:
CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='replication_user', MASTER_PASSWORD='replication_user_password', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=314;
гдеMASTER_HOST
– ip первого мастера,MASTER_USER/ MASTER_PASSWORD
– логин/пароль пользователя с правами репликации, которого создали ранее,MASTER_LOG_FILE
иMASTER_LOG_POS
- название журнала и номер позиции из пункта 5 подраздела На первом сервере соответственно. - Запустить репликацию, выполнив в терминале команду:
start slave;
- Проверить статус сервера на наличие ошибок, выполнив команду:
show slave status \G
Наличие числовых значений вRead_Master_Log_Pos
иRelay_Log_Pos
ука зывает, что ошибок нет. - Проверить состояние бинарного лога, выполнив в терминале команду:
show master status;
Значение полей Position и File будут использоваться для конфигурации репликации на первом сервере.
| File | Position
| mariadb-bin.000002 | 8196
На первом сервере:
- Остановить репликацию, выполнив в терминале команду:
stop slave;
- Настраиваем репликацию, указав первому серверу, где нужно искать файл журнала:
CHANGE MASTER TO MASTER_HOST='server2', MASTER_USER='replication_user', MASTER_PASSWORD='replication_user_password', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=8196;
где MASTER_HOST – ip второго мастера,MASTER_USER
/MASTER_PASSWORD
– логин/пароль пользователя с правами репликации, которого создали ранее,MASTER_LOG_FILE
иMASTER_LOG_POS
- название журнала и номер позиции из пункта 7 подраздела На втором сервере соответственно. - Запустить репликацию, выполнив в терминале команду:
start slave;
- Проверить статус сервера, выполнив в терминале команду:
show slave status \G
Наличие числовых значений вRead_Master_Log_Pos
иRelay_Log_Pos
указывают, что ошибок нет. Если нет ошибок, то репликация настроена. В секции [Database] конфигурационного файлаtechnodoc.settings.ini
ТехеноДок указать корректную строку подключения к БД MariaDB и установить значениеRoundRobin
для ключаFailoverStrategy
. При возникновении проблем с восстановлением репликации при переключении или аварийной остановки, необходимо запустить репликацию повторно, выполнив в терминале команду: start slave;
# Пример строки подключения
Type = MariaDb # Тип БД - MariaDb
ConnectionString = Server=localhost;Database=technodoc;Uid=root;Password=password # Строка соединения с БД