Skip to content

slave_relay_log_info

xiaoboluo768 edited this page Jun 7, 2020 · 4 revisions
  • 该表提供查询SQL线程重放的二进制文件对应的主库位置和relay log当前最新的位置

  • 表结构定义

CREATE TABLE `slave_relay_log_info` (
  `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
  `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.',
  `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.',
  `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
  `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.',
  `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
  `Number_of_workers` int(10) unsigned NOT NULL,
  `Id` int(10) unsigned NOT NULL COMMENT 'Internal Id that uniquely identifies this record.',
  `Channel_name` char(64) NOT NULL COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication',
  PRIMARY KEY (`Channel_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Relay Log Information';
  • 表字段与show slave status输出字段、relay-log.info文件中的行信息对应关系及其表字段含义如下:
relay-log.info文件中的行数 mysql.slave_relay_log_info表字段 show slave status命令输出字段 字段含义描述
1 Number_of_lines [None] 表示relay-log.info中的信息行数或者slave_relay_log_info表中的信息字段数,用于版本化表定义
2 Relay_log_name Relay_Log_File 表示当前最新的relay log文件名称
3 Relay_log_pos Relay_Log_Pos 表示当前最新的relay log文件对应的最近一次完整接收的event的位置
4 Master_log_name Relay_Master_Log_File 表示SQL线程当前正在重放的中继日志对应的主库binlog 文件名
5 Master_log_pos Exec_Master_Log_Pos 表示SQL线程当前正在重放的中继日志对应主库binlog 文件中的位置
6 Sql_delay SQL_Delay 表示延迟复制指定的从库必须延迟主库多少秒
7 Number_of_workers [None] 表示从库当前并行复制有多少个worker线程
8 Id [None] 用于内部唯一标记表中的每一行记录,目前总是1
9 Channel_name Channel_name 表示从库复制通道名称,用于多源复制,一个通道对应一个主库源
  • 表记录内容示例
root@localhost : mysql 10:39:31> select * from slave_relay_log_info\G
*************************** 1. row ***************************
  Number_of_lines: 7
   Relay_log_name: /home/mysql/data/mysqldata1/relaylog/mysql-relay-bin.000205
    Relay_log_pos: 14097976
  Master_log_name: mysql-bin.000060
   Master_log_pos: 21996812
        Sql_delay: 0
Number_of_workers: 16
               Id: 1
     Channel_name: 
1 row in set (0.00 sec)

什么是中继日志:

  • 中继日志(relay log)与二进制日志(binlog,即,binary log)中,保存的event数据是一样的(但中继日志中还保存了更多的信息),也是由一组包含描述数据库变更的事件数据的文件组成,这些文件名后缀带连续编号,此外,还有一个包含所有正在使用的中继日志文件名称的索引文件
  • 中继日志中的数据存放格式与二进制日志相同,都可以使用mysqlbinlog命令来提取数据,默认情况下,中继日志保存在datadir下,文件名格式为:host_name-relay-bin.nnnnnn,其中host_name是从库服务器主机名,nnnnnn是文件后缀序列号。连续的中继日志文件从000001开始的连续序列号创建。使用索引文件来跟踪当前正在使用的中继日志文件。默认的中继日志索引文件名保存在datadir下,文件名格式为:host_name-relay-bin.index

* 中继日志文件和中继日志索引文件名称可分别使用--relay-log和--relay-log-index参数选项指定值覆盖默认值,如果文件名使用默认值,则要注意主机名称不能修改,否则会报无法打开中继日志的错误,建议使用参数选项指定固定的文件名称前缀。如果已经出现了这种情况发生报错了,那么需要修改index文件中的中继日志文件名和datadir下的中继日志文件名前缀为新的主机名,然后重启从库

在什么情况下会产生新的中继日志文件

  • I/O线程启动时
  • 使用语句:FLUSH LOGS或mysqladmin flush-logs命令时
  • 当前中继日志文件的大小变得“太大”时,日志滚动规则如下:

* 如果max_relay_log_size系统变量的值大于0,那么中继日志按照此参数指定的大小进行滚动

* 如果max_relay_log_size系统变量的值为0,则中继日志按照max_binlog_size系统变量指定的大小进行滚动

SQL线程在执行完relay log之后,会自行决定何时清理掉这些已经执行完成的relay log文件,但如果使用FLUSH LOGS语句或mysqladmin flush-logs命令强制滚动中继日志时,SQL线程可能会同时清理掉已经执行完成的relay log文件。

上一篇: slave_master_info表 | 下一篇: slave_worker_info表

Clone this wiki locally