Я настраиваю репликацию mysql master-master на двух серверах (db1 и db2). Я начал с настройки db2 в качестве подчиненного устройства для db1, и он отлично работает. Но когда я настраиваю db1 как подчиненное устройство для db2, он не реплицируется.
На первый взгляд все выглядит нормально, но данные не реплицируются. Ни в одном из журналов ошибок нет ошибок. Статус ведомого обновляет позицию журнала бункера. Я использовал mysqlbinlog для проверки как binlog на db2, так и журнала реле на db1, и все запросы поступают туда, но не выполняются на db1.
«показать статус подчиненного» на обоих серверах показывает, что потоки подчиненного io и sql имеют значение «Да» и что позиция журнала реле обновляется потоком sql.
Также на обоих серверах:
>echo "show processlist" | mysql | grep "system user"
166819 system user NULL Connect 3655 Waiting for master to send event NULL
166820 system user NULL Connect 3507 Has read all relay log; waiting for the slave I/O thread to update it NULL
Соответствующий конфиг для db1:
server-id = 1
log-slave-updates
replicate-same-server-id = 0
auto_increment_increment = 4
auto_increment_offset = 1
master-host = db2
master-port = 3306
master-user = slaveuser
master-password = ***
skip-slave-start
sync_binlog = 1
binlog-ignore-db=mysql
Конфиг для db2
server-id = 2
log-slave-updates
replicate-same-server-id = 0
auto_increment_increment = 4
auto_increment_offset = 2
master-host = db1
master-port = 3306
master-user = slaveuser
master-password = ***
sync_binlog = 1
relay-log=mysql-relay-bin
binlog-ignore-db=mysql
Что еще я могу найти, чтобы убедиться, что db1 выполняет запросы от db2?
Ваши конфиги не выглядят завершенными - есть ли у вас 'log-bin = mysql-master-bin' (sic) где-нибудь в обоих конфигах? В общем, репликация от мастера к подчиненному (в любом направлении) выглядит так:
mysql -> главный binlog -> (сеть к ведомому) -> ведомый релейный журнал -> ведомый
Делать это нужно в обоих направлениях; если вы не регистрируете транзакции на db2, то ему нечего отправлять обратно на db1. В общем, убедитесь, что вы настроили лог-бункер и релейный журнал на обоих серверах.
Вам не нужны обновления журналов-подчиненных, которые используются для цепочки (главный -> подчиненный -> подчиненный). Было бы полезно, если бы вы, например, подключили 3-е ведомое устройство к конфигурации с двумя ведущими устройствами для резервного копирования. Поскольку вы никогда не отправите db1-> db2-> db1 (плохой цикл), это бесполезно.
Мы обновили серверы mysql на обеих машинах до версии 5.0.91, и теперь она работает. По-видимому, 5.0.32 и 5.0.33 довольно глючны, и репликация в mysql начала сглаживаться около 5.0.70 или около того.