Я пытаюсь настроить репликацию с одного главного сервера на несколько подчиненных. Я последовал традиционным шагам ...
На Мастере:
Обновлен файл 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
server_id
.SLAVE START
на обоих рабах.Используйте это как процедуру добавления нового ведомого устройства (или замены мертвого).