У меня есть простая настройка репликации master-slave между двумя серверами MariaDB 5.5. Связь между серверами несколько нестабильна, время от времени вызывая отключения.
Однако "master_retry_count = 0" установлен в my.ini на ведомом устройстве, что, насколько я понимаю, означает, что ведомое устройство должно продолжать попытки повторно подключиться к мастеру всякий раз, когда происходит отключение, поэтому действительно не должно быть никаких серьезных проблем с ненадежное соединение.
Однако я несколько раз останавливал репликацию со следующей ошибкой:
Поток ввода-вывода ведомого устройства останавливается из-за сбоя SET @master_heartbeat_period на ведущем устройстве. Ошибка: потеряно соединение с сервером MySQL во время запроса
Когда я заметил это, репликация часто находилась в остановленном состоянии в течение нескольких часов, и простой запрос «START SLAVE» снова исправляет ситуацию, но я не понимаю, почему вообще возникает эта проблема.
Может ли кто-нибудь иметь опыт или пролить свет на это? Есть ли способ гарантировать, что репликация не остановится из-за временной проблемы с подключением?
Вот пример журнала с ошибкой:
130710 2:42:29 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013)
130710 2:42:30 [Note] Slave I/O thread: Failed reading log event, reconnecting to retry, log 'mysql-bin.000341' at position 20051884
130710 2:56:26 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013)
130710 2:56:26 [Note] Slave I/O thread: Failed reading log event, reconnecting to retry, log 'mysql-bin.000341' at position 20523725
130710 2:57:04 [ERROR] Slave I/O: error reconnecting to master 'rep_user@master_server:3306' - retry-time: 60 retries: 0 message: Lost connection to MySQL server at 'reading au
thorization packet', system error: 0, Error_code: 2013
130710 2:58:05 [Note] Slave: connected to master 'rep_user@master_server:3306',replication resumed in log 'mysql-bin.000341' at position 20523725
130710 3:26:31 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013)
130710 3:26:31 [Note] Slave I/O thread: Failed reading log event, reconnecting to retry, log 'mysql-bin.000341' at position 20893274
130710 3:27:48 [ERROR] Slave I/O: error reconnecting to master 'rep_user@master_server:3306' - retry-time: 60 retries: 0 message: Lost connection to MySQL server at 'reading authorization packet', system error: 0, Error_code: 2013
130710 3:31:01 [Note] Slave: connected to master 'rep_user@master_server:3306',replication resumed in log 'mysql-bin.000341' at position 20893274
130710 3:32:19 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013)
130710 3:32:19 [Note] Slave I/O thread: Failed reading log event, reconnecting to retry, log 'mysql-bin.000341' at position 21083757
130710 3:48:03 [ERROR] Slave I/O: The slave I/O thread stops because SET @master_heartbeat_period on master failed. Error: Lost connection to MySQL server during query, Error_code: 1593
130710 3:48:03 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.000341', position 21083757
(из приведенного выше журнала видно, что соединение действительно очень плохое; обычно оно не так уж и плохо, но время от времени случается. Очевидно, что исправление соединения идеально, но я бы также предпочел, чтобы репликация не останавливалась из-за этого)
Возможно, актуальные настройки my.ini на ведомом устройстве:
master_retry_count=0
slave_sql_verify_checksum=0
slave_net_timeout=1800
net_retry_count=10
Я мало что знаю о сердцебиении, поэтому никогда не устанавливал его, но согласно статусу период сердцебиения составляет 900 секунд.
Спасибо за прочтение.
Похоже, это ошибка в MariaDB и MySQL, исправленная в MySQL 5.6.
Исправление в MariaDB будет отслеживаться здесь: https://mariadb.atlassian.net/browse/MDEV-6188