17.2.2.1 The Slave Relay Log
17.2.2.2 Slave Status Logs
在复制期间,从属服务器会创建几个日志,以保存从主服务器中继到从属服务器的二进制日志事件,并记录有关中继日志中当前状态和位置的信息。在此过程中使用三种日志类型,在此处列出:
该中继日志包括的事件从主的二进制日志读取并从I / O线程写入。中继日志中的事件在从属服务器上作为SQL线程的一部分执行。
该主信息日志 包含状态和当前的配置信息从服务器的连接到主机。该日志包含有关主机名,登录凭据和坐标的信息,这些信息指示从属已从主机的二进制日志读取了多远。
在MySQL 5.6之前,此日志始终是一个文件(master.info),但在MySQL 5.6及更高版本中,可以mysql.slave_master_info通过使用从属启动该日志,而不是将其写入 文件中 master_info_repository=TABLE。
该中继日志信息记录 保存有关从服务器的中继日志中的执行点的状态信息。
在MySQL 5.6之前,此日志始终是一个文件(relay-log.info),但在MySQL 5.6及更高版本中,可以mysql.slave_relay_log_info通过使用从属启动该日志,而不是将其写入 文件中 relay_log_info_repository=TABLE。
当表用于从属状态日志时,如果mysqld无法初始化复制日志表,但允许从属继续启动,则会发出警告。从不支持从属日志表的MySQL版本升级到支持从属日志表的MySQL版本时,最有可能发生这种情况。
在MySQL 5.6.5及更早版本中, slave_master_info和 slave_relay_log_info表MyISAM是默认使用 的,这意味着在开始复制之前有必要通过发出来更改这些表使用的存储引擎 ALTER TABLE … ENGINE=InnoDB,如下所示:
ALTER TABLE mysql.slave_master_info ENGINE=InnoDB;
ALTER TABLE mysql.slave_relay_log_info ENGINE=InnoDB;
该ALTER TABLE声明必须由MySQL执行root或其他用户帐户与在相应的权限 mysql系统数据库。复制运行时,您不应尝试执行此操作。从MySQL 5.6.3开始,ALTER TABLE不允许在复制正在进行时尝试在这两个表上执行。从MySQL 5.6.4开始,在复制进行过程中,不允许在任何一个或两个表上执行需要写锁定的语句,而在任何时候都只允许执行读取操作。
重要
请勿尝试在slave_master_info或 slave_relay_log_info表中手动更新或插入行 。这样做可能会导致不确定的行为,并且不受支持。
如果将master_info_repository 和设置relay_log_info_repository为 TABLE,则 使用事务存储引擎创建mysql.slave_master_info和 mysql.slave_relay_log_info表 InnoDB。作为一个表,对中继日志信息日志的更新将与事务一起提交,这意味着即使在服务器意外中断的情况下,记录在该日志中的从服务器的进度信息也始终与已应用于数据库的信息一致。–relay-log-recovery必须在从站上启用该 选项以确保弹性。有关更多详细信息,请参见第17.3.2节“处理复制从属的意外中断”。




