zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

MySQL 中继日志

mysql日志 中继
2023-09-14 09:16:40 时间

什么是中继日志

从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后从服务器SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致

show variables like '%relay%';

#结果
+---------------------------+----------------------------------+
| Variable_name             | Value                            |
+---------------------------+----------------------------------+
| max_relay_log_size        | 0                                |
| relay_log                 | relay-mysql                      |
| relay_log_basename        | /var/lib/mysql/relay-mysql       |
| relay_log_index           | /var/lib/mysql/relay-mysql.index |
| relay_log_info_file       | relay-log.info                   |
| relay_log_info_repository | FILE                             |
| relay_log_purge           | ON                               |
| relay_log_recovery        | ON                               |
| relay_log_space_limit     | 0                                |
| sync_relay_log            | 10000                            |
| sync_relay_log_info       | 10000                            |
+---------------------------+----------------------------------+

max_relay_log_size

relay log 允许的最大值,如果该值为0,则默认值为 max_binlog_size (1G);

如果不为0,则 max_relay_log_size 则为最大的relay_log文件大小;

relay_log

定义 relay_log 的位置和名称,如果值为空,则默认位置在数据文件的目录;

relay_log_index

定义 relay_log 索引的位置和名称,记录有几个 relay_log 文件,默认为2个

cat /var/lib/mysql/relay-mysql.index

#结果
./relay-mysql.000241
./relay-mysql.000242

relay_log_info_file

定义 relay-log.info 的位置和名称

relay-log.info 记录 master 主库的 binary_log 的恢复位置和 从库 relay_log 的位置;

[root@localhost ~]# cat /var/lib/mysql/relay-log.info

#结果
7
./relay-mysql.000242
19421766
mysql-bin.000094
34300252
0
0
1

relay_log_purge

是否自动清空中继日志,默认值为1(启用);

relay_log_recovery

当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启;

sync_relay_log

当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay log中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O;

当设置为0时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改;

sync_relay_log_info

这个参数和 sync_relay_log 参数一样。