当前位置: 首页 > 科技观察

图文结合带你了解MySQL日志(relaylog)的中继日志(relaylog)

时间:2023-03-14 13:27:36 科技观察

什么是中继日志(relaylog)中继日志(relaylog)只存在于从服务器上主从服务器架构。从服务器(slave)为了与主服务器(Master)保持一致,需要从主服务器读取二进制日志的内容,并将读取到的信息写入本地日志文件。从服务器的本地日志文件称为中继日志。然后,从服务器读取中继日志,并根据中继日志的内容更新从服务器的数据,完成主从服务器的数据同步。主从服务器搭建完成后,relaylog默认会保存在从服务器的data目录下。文件名格式为:slaveservername-relay-bin。序列号。relaylog还有一个索引文件:从服务器名称-relay-bin.index,用于定位当前正在使用的relaylog。(主从复制示意图)从服务器I/O线程读取主服务器的二进制日志(binlog)记录到从服务器的本地文件中,然后从服务器SQL线程读取内容relaylog并应用到从服务器上,使从服务器和主服务器的数据保持一致。中继日志的作用中继日志用在主从服务器架构中,从服务器用来存放主服务器的二进制日志内容的一个中间文件。从服务器通过读取中继日志的内容来同步对主服务器的操作。relaylog是连接mastert(主服务器)和slave(从服务器)的信息。它是复制的核心。I/O线程将master传来的binlog存储到relaylog中,relaylog起到缓冲区的作用,这样master就不必等待slave执行完成再发送下一个binlog。查看中继日志中继日志文件的格式与二进制日志文件相同,可以使用mysqlbinlog读取SETTIMESTAMP=1615352328/*!*/;BEGIN/*!*/;#at900#21141311:33:46serverid1end_log_pos832CRC320xcc16d651Table_map:`kaito`.`test`mappedtonumber91#at950#21141311:33:46serverid1end_log_pos872CRC320x07e4047cSTD_F1EN_flags是主服务器表示主服务器删除了一行数据BINLOG'CD95YBMBAAAAMgAAAAEADAAAAAAFsAAAAAEAABGRlbW8ABHRlc3QAAQMAAQEBAFHWFsw=CD95YCABAAAAKAAAAGgDAAAAAAFsAAAAAAEAAgAB/wABAAAAfATkBw=='/*!*/;#at1000这一段的意思是,主服务器(》执行了2个步骤的日志:在表中找到编号为91的记录,2表的位置是91.删除编号为91的记录,日志位置为872通过语句解析相关参数:showvariableslike'%relay%'查看第一骨干relay的所有相关参数如下:mysql>showvariableslike'%继电器%';+----------------------------+------------------------------------+|变量名|值|+-----------------------------+------------------------------------+|max_relay_log_size|0||中继日志|快斗中继站||relay_log_basename|/var/lib/mysql/kaito-relay-bin||中继日志索引|/var/lib/mysql/kaito-relay-bin.index||中继日志信息文件|.info||relay_log_info_repository|表||中继日志清除|开||中继日志恢复|关闭||relay_log_space_limit|0||同步中继日志|10000||----------+-------------------------------------+11rowsinset(0.00sec)max_relay_log_size:标记中继日志允许的最大值,如果值为0,默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size是最大的relay_log文件大小;relay_log:定义relay_log的位置和名字,如果值为空,则默认位置在数据文件目录(datadir),文件名默认为host_name-relay-bin.nnnnnnrelay_log_index:同relay_log,定义relay_log的位置和名称;一般在relay-logLocation和name同一个目录下(relay-log.info记录了MASTER的binary_log的recovery位置和relay_log所在的位置)relay_log_purge:当relaylog不再需要时是否自动清除relaylog。默认值为1(启用)。relay_log_recovery:当slave从库宕机时,如果relay-log损坏,部分relaylog没有处理,所有未执行的relay-log会自动丢弃,重新从master获取日志,从而保证中继日志完整性。默认情况下,此功能处于禁用状态。当relay_log_recovery的值设置为1时,可以在从库上开启该功能。建议启用它。relay_log_space_limit:为了防止relaylog占满磁盘,这里设置relaylog的最大限制。注意!但是这个设置可能会导致主库崩溃,从库的中继日志不完整。不到万不得已不推荐!sync_relay_log:该参数与sync_binlog相同。当设置为1时,slaveI/O线程每次接收到master发送的binlog日志都会写入systembuffer,然后flush到relaylogrelaylog中,这种情况下,这是最安全的,因为如果发生崩溃,您最多会丢失一个事务,但会造成大量的磁盘I/O。当设置为0时,不会立即刷新到relaylog中,而是由操作系统决定什么时候写入,虽然安全性降低了,但是减少了很多磁盘I/O操作。该值默认为0,可以动态修改。建议使用默认值。sync_relay_log_info:该参数与sync_relay_log参数相同。当设置为1时,slaveI/O线程每次接收到master发送的binlog日志都会写入系统缓冲区,然后flush到relay-log.info中。是最安全的,因为一旦发生崩溃,你最多会丢失一个事务,但是会对磁盘造成大量的I/O。当设置为0时,不会立即刷新到relay-log.info中,而是由操作系统决定何时写入。虽然安全性降低了,但是减少了很多磁盘I/O操作。该值默认为0,可以动态修改。建议使用默认值。以上只是简单介绍了各个参数的作用。这些参数的具体设置还是需要根据各个用户的实际系统情况进行设置;参考文章《MySQL是怎样运行的--从根儿上理解MySQL》—孩子4919(https://juejin.cn/book/6844733769996304392)