MySQL Master-Master with offsets getting ERROR 1872

I'm trying to fix the replication between a master-master MySQL database replication model.

Server 1 (with the IP of 192.168.2.6) is configured with:

auto-increment-increment       = 2
auto-increment-offset          = 1

So it writes only odd primary key auto-incrementing IDs.

Server 2 (with the IP of 192.168.2.7) is configured with:

auto-increment-increment       = 2
auto-increment-offset          = 2

So it writes only even primary key auto-incrementing IDs.

I've been told that this was working for some time, but since I've been hired, it has been in failure to sync status. I'm operating under the assumption that this is possible.

My job is to get it working in this manner. I've done the following steps to try to get them to sync:

Server 1:
    mysql>
    RESET MASTER;
    # First time only:
    #GRANT REPLICATE SLAVE ON *.* TO 'replicate'@192.168.2.7 IDENTIFIED BY '[password_redacted]';
    #FLUSH PRIVILEGES;
    FLUSH TABLES WITH READ LOCK;
    SHOW MASTER STATUS;

    bash#
    mysqldump -u root -p -ceQRE --hex-blob --triggers --opt --single-transaction --comments --dump-date --no-autocommit --all-databases -r /root/master.sql
    scp -P 5934 /root/master.sql root@192.168.2.7:.

    mysql>
    UNLOCK TABLES;

Server 2:
    mysql>
    STOP SLAVE;

    bash#
    mysql -u root -p < /root/master.sql

    mysql>
    # First time only:
    #GRANT REPLICATE SLAVE ON *.* TO 'replicate'@192.168.2.6 IDENTIFIED BY '[password_redacted]';
    #FLUSH PRIVILEGES;
    RESET SLAVE;
    CHANGE MASTER TO MASTER_HOST='192.168.2.6', MASTER_USER='replicate', MASTER_PASSWORD='[password_redacted]', MASTER_LOG_FILE='ibm.000001', MASTER_LOG_POS=28556380;
    START SLAVE;
    SHOW SLAVE STATUS\G

Server 1:
    mysql>
    STOP SLAVE;
    CHANGE MASTER TO MASTER_HOST='192.168.2.7', MASTER_USER='replicate', MASTER_PASSWORD='[password_redacted]', MASTER_LOG_FILE='ibm.000004', MASTER_LOG_POS=121875;
    CHANGE REPLICATION FILTER REPLICATE_DO_DB = (reminderdental2), REPLICATE_IGNORE_DB = (mysql);
    START SLAVE;

Каждый раз он говорит, что синхронизирует, но количество строк никогда не приходит в соответствие. Через некоторое время я получу ошибку:

Slave SQL for channel '': Slave failed to initialize relay log info structure from the repository, Error_code: 1872
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

Я также попробовал Percona XtraBackup, чтобы получить бинарное резервное копирование / восстановление, чтобы запустить его в первый раз.

Я думал о переходе на репликацию GTID, но слышал, что производительность не так хороша. Я заинтересован в обоих решениях, чтобы заставить его работать таким образом, а также в отзывах о производительности кластера серверов 2-9 с использованием GTID.

Версия сервера 1:

5.7.21-0ubuntu0.16.04.1-log (Ubuntu)
percona-xtrabackup-24/unknown,now 2.4.9-1.xenial amd64 [installed]

Версия Serer 2:

5.7.21-log MySQL Community Server (GPL)
percona-xtrabackup-24, 2.4.9.1.el7

4 ответа

На MySQL > 6 вы должны также использовать

mysql> STOP SLAVE;
mysql> RESET SLAVE ALL;

Должно быть то же самое, но использование документированной команды лучше, чем настройка системных таблиц. Смотрите также https://dev.mysql.com/doc/refman/8.0/en/reset-slave.html

Если вы получаете следующую ошибку:

[ОШИБКА] Подчиненный SQL для канала 'group_replication_applier': Подчиненному не удалось инициализировать информационную структуру журнала ретрансляции из хранилища, Код ошибки: 1872

Вот решение:

Из консоли mysql:

USE mysql;
TRUNCATE TABLE slave_relay_log_info;

Чем перезапустить mysql:

service mysql restart

Надеюсь, это работает и для вас, ребята!

Я знаю, что этот вопрос старый, это случилось со мной сегодня, и мне помогла комбинация ответов Алессандро Карини и пользователя 260223:

в консоли MySQL с пользователем root:

      mysql> STOP SLAVE;
mysql> RESET SLAVE ALL;

а потом:

      USE mysql;
TRUNCATE TABLE slave_relay_log_info;

затем перезапустил службу MySQL

      sudo service mysql restart

установить основную информацию:

      CHANGE MASTER TO MASTER_HOST='[your master host/IP]',
MASTER_USER='[your master replication user]',
MASTER_PASSWORD='[your master replication password]',
MASTER_LOG_FILE='[your master file]',
MASTER_LOG_POS=[your master pos];

затем

      START SLAVE;

и проверьте, все ли в порядке:

      SHOW SLAVE STATUS\G;

У меня была та же проблема, в моем случае причина была в том, что на ведомом устройстве отсутствовал файл реле. В файле ретранслятора "index" было несколько записей с именами файлов, но одна из этих записей отсутствовала. Я удалил эту запись, затем после перезапуска началась репликация. Приветствия.

Другие вопросы по тегам