Назад | Перейти на главную страницу

Необычное поведение MariaDB / MySQL с одним главным и несколькими подчиненными

Я пытаюсь настроить репликацию с одного главного сервера на несколько подчиненных. Я последовал традиционным шагам ...

На Мастере:

Обновлен файл my.cnf:

log-bin         = /var/log/mysql/master-bin
log-bin-index   = /var/log/mysql/master-bin.index
binlog_format   = mixed
server-id       = 01
replicate-do-db = database_name

Создал пользователя для каждого ведомого устройства, используя следующие команды:

create user 'replicant'@'%' identified by 'replicant_password';
grant replication slave on *.* to replicant;
flush privileges;

На рабах сделал следующее:

Обновлен my.cnf:

server-id       = 02 [and 03,04 for the other slaves]
relay-log-index = /var/log/mysql/slave-relay-bin.index
relay-log       = /var/log/mysql/slave-relay-bin
replicate-do-db = database_name
sudo systemctl restart mariadb

Я запер столы на мастере. Я запустил show master status, чтобы получить файл журнала и позицию. Я скопировал базу данных в файл .sql, перенес его на подчиненный сервер и импортировал. Вот где у меня проблемы ...

На первом ведомом я смог выполнить следующую команду, запустить ведомое устройство, и репликация сработала отлично.

MariaDB [(none)]> change master 'master01' to
    -> master_host='master_IP_address',
    -> master_user='replicant',
    -> master_password='replicant_password',
    -> master_port=3306,
    -> master_log_file='master-bin.000001',
    -> master_log_pos=62307428,
    -> master_connect_retry=10,
    -> master_use_gtid=slave_pos;

Но когда я выполняю те же шаги на втором и третьем ведомом устройстве, я получаю всевозможные ошибки, указывающие на то, что он не может вставлять таблицы, строки и т. Д., Потому что данные уже существуют. Это почти похоже на игнорирование позиции журнала от мастера и попытку перезаписать ВСЕ снова. Я пробовал перезагрузить ведомые устройства и запускал процесс несколько раз.

Единственное, что сработало, - это полностью удалить базу данных из подчиненных устройств 2 и 3, а затем запустить подчиненную службу БЕЗ импорта базы данных. На этом этапе база данных была создана и обработала все транзакции. Это нормальное поведение? Я просто хочу убедиться, что что-то не упускаю.

Я использую Ubuntu 18.04.3 LTS с Maria DB 10.4.7.

Для последующего Slave клонируйте существующий Slave Slave:

  • SLAVE STOP
  • Скопируйте все файлы, относящиеся к MySQL / MariaDB.
  • Сделайте одно изменение: server_id.
  • SLAVE START на обоих рабах.

Используйте это как процедуру добавления нового ведомого устройства (или замены мертвого).