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

Увеличение задержки репликации MySQL

У меня простая настройка репликации master-slave. Все работало без проблем больше года.

Несколько дней назад запаздывание репликации начало расти и продолжает расти без очевидной причины.

Seconds_Behind_Master теперь больше 4 дней и 6 часов.

Оба подчиненных потока SQL и ввода-вывода работают, проблем со связью нет.

SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: s1.my.pl
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.001674
          Read_Master_Log_Pos: 10948252
               Relay_Log_File: mysqld-relay-bin.000509
                Relay_Log_Pos: 63370742
        Relay_Master_Log_File: mysql-bin.001638
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 63370596
              Relay_Log_Space: 3523067396
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 371329
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
1 row in set (0.00 sec)

Показать полный список процессов дает странный вывод в одной строке «exit mysqld_lock_tables ()», я не уверен, что это означает

 SHOW FULL PROCESSLIST;
+-----+-------------+-----------+------+---------+--------+----------------------------------+-----------------------+-----------+---------------+-----------+
| Id  | User        | Host      | db   | Command | Time   | State                            | Info                  | Rows_sent | Rows_examined | Rows_read |
+-----+-------------+-----------+------+---------+--------+----------------------------------+-----------------------+-----------+---------------+-----------+
| 808 | system user |           | NULL | Connect |    892 | Waiting for master to send event | NULL                  |         0 |             0 |         1 |
| 809 | system user |           | NULL | Connect | 371477 | exit mysqld_lock_tables()        | NULL                  |         0 |             0 |         1 |
| 810 | root        | localhost | NULL | Query   |      0 | NULL                             | SHOW FULL PROCESSLIST |         0 |             0 |       401 |
+-----+-------------+-----------+------+---------+--------+----------------------------------+-----------------------+-----------+---------------+-----------+

Команда SHOW_OPEN_TABLES показывает, что ни одна таблица не заблокирована

Есть подсказки, что я могу сделать, чтобы исправить это или как получить более подробную диагностику?

Одна из проблем с репликацией MySQL - это сериализация ввода-вывода в ведомом устройстве. В то время как мастер выполняет несколько задач ввода-вывода одновременно, они записываются в единый журнал реле, который затем выполняется подчиненным устройством, тем самым сериализуя операции ввода-вывода. Следовательно, ваше ведомое устройство всегда должно иметь большую пропускную способность ввода-вывода, чем ваше ведущее устройство.

Чтобы узнать, действительно ли у вас есть проблема с вводом-выводом, установите ioprompt (домашняя страница).

В вашем случае может быть другая проблема, возможно, вы столкнулись с ошибкой. Ты пробовала

stop slave;
start slave;

чтобы увидеть, решит ли это проблему? Далее попробуйте остановить и запустить подчиненный процесс MySQL.