mirror of
https://github.com/MariaDB/server.git
synced 2025-03-06 19:23:09 +01:00
![]() There are two calls to read_log_event() on master in mysql_binlog_send(). Each call reads 19 bytes in this test case and the error of the second read_log_event() is reported to the slave. The second read_log_event() starts from position 94 (75 + 19) to 113 (75 + 19 + 19). Usually, there are two events in the binary log: . 0 - 3 - Header . 4 - 105 - Format Descriptor Event . 106 - 304 - Query Event and both reads fail because operations are reading from invalid positions as expected. However, mysql_binlog_send() does not use the same IO_CACHE that is used to write into binary log (i.e. mysql_bin_log.log_file) for the hot binary log. It opens the binary log file directly by calling open_binlog() and creates a separated IO_CACHE. So there is a possibly that after a master has flushed the binary log file, the content has been cached by the filesystem, and has not updated the disk file. If this happens, then a slave will only see part of the file, and thus the second read_log_event() will report event truncated error. To fix the problem, if the first read_log_event() has failed, we ensure that the second one will try to read from the same position. |
||
---|---|---|
.. | ||
binlog | ||
bugs | ||
engines | ||
federated | ||
funcs_1 | ||
funcs_2 | ||
im | ||
innodb | ||
innodb_plugin | ||
jp | ||
large_tests | ||
manual | ||
ndb | ||
ndb_team | ||
parts | ||
rpl | ||
rpl_ndb | ||
stress | ||
sys_vars |