если у меня два хоста mysql указывают друг на друга: хост A и хост B:
------> hostA(write co-master)
|
|
|
-----> hostB (read-only co-master)
почему будет ли hostA когда-либо показывать задержку репликации, когда на hostB ничего не записывается? Иногда я вижу, что ведомое устройство запаздывает на моем ведущем устройстве записи, указывающем на ведомое устройство только для чтения:
[root@db17 ~]# mysql -e "show slave status \G" | egrep "(Exec_Master_Log_Pos|Master_Log_File|Read_Master_Log_Pos|Seconds)"
Master_Log_File: binary.108913
Read_Master_Log_Pos: 137400187
Relay_Master_Log_File: binary.108913
Exec_Master_Log_Pos: 137400187
Seconds_Behind_Master: 0
[root@db17 ~]# mysql -e "show slave status \G" | egrep "(Exec_Master_Log_Pos|Master_Log_File|Read_Master_Log_Pos|Seconds)"
Master_Log_File: binary.108913
Read_Master_Log_Pos: 137960791
Relay_Master_Log_File: binary.108913
Exec_Master_Log_Pos: 137960616
Seconds_Behind_Master: 70
[root@db17 ~]# mysql -e "show slave status \G" | egrep "(Exec_Master_Log_Pos|Master_Log_File|Read_Master_Log_Pos|Seconds)"
Master_Log_File: binary.108913
Read_Master_Log_Pos: 138609398
Relay_Master_Log_File: binary.108913
Exec_Master_Log_Pos: 138609398
Seconds_Behind_Master: 0
https://gist.github.com/ethan-riskiq/11b88443450f3fc6e0f8003bda797824 для вывода полного состояния ведомого. Запуск Percona mysql 5.7.25 с включенными GTID.
зачем hostA показывать задержку репликации, когда ничего не происходит? записано на hostB
Скорее предположительно:
Данные записываются на hostA -> реплицируются на hostB (и, так как обновления ведомого журнала включены) -> реплицируются на hostA.
hostA видит, что транзакции имеют идентификатор сервера и знает, что применять их не нужно. Однако он все еще записывает данные в Relay_Master_Log_File (проверка идентификатора сервера выполняется в потоке sql).
Похоже, что hostA имеет конкуренцию ввода-вывода. Почему?