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

Репликация MariaDB не подключается автоматически

У меня есть простая настройка репликации 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