时间:2021-07-01 10:21:17 帮助过:28人阅读
【环境描述】
msyql5.6.14
【报错信息】
mysql的slave启动时,error.log中出现Warning警告:
[Warning] Slave SQL: If a crash happensthis configuration does not guarantee that the relay log info will beconsistent, Error_code: 0
这条Warning信息对Mysql和MySQL复制功能没有任何影响。
【报错原因】
MySQL5.6版本开始支持把master.info和relay-log.info的内容写入到mysql库的表中,
master.info--> mysql.slave_master_info
relay-log.info--> mysql. slave_relay_log_info
同时在MySQL5.6版本中,增加了Slave crash-safe replication功能,为了保证mysql的replication能够crash-safe,slave_master_info和slave_relay_log_info表必须使用事务型的存储引擎(InnoDB),不要尝试去手动修改这两张表的内容。同时,Slave还要开启relay_log_recovery功能。
【解决方法】
设置master_info_repository和relay_log_info_repository的值为TABLE,同时开启relay_log_recovery功能。
修改/etc/my.cnf配置文件,添加以下3项:
master-info-repository=table # 可以使用set global 动态修改
relay-log-info-repository=table # 可以使用setglobal 动态修改
relay-log-recovery=1 # 只读参数,必须修改my.cnf重启mysql
然后重启mysql实例。
【参考资料】
lmaster.info和relay-log.info日志
在复制的Slave节点上会创建两个日志,分别是master.infor和relay-log.info,位于datadir目录中。在MySQL5.6和后续的版本中,可以通过设置master-info-file和relay-log-info-file参数来指定写入到mysql的表中或者写入文件。
这两个文件中包含一些类似showslave status输出的信息,当slave启动的时候会读取master.info和relay-log.info文件来确定从master读取binary log和读取relay log的信息。
Slave的I/O线程负责更新维护master.info文件,
master.info | mysql.slave_master_info | SHOW SLAVE STATUS Column | Description |
1 | Number_of_lines | [None] | Number of lines in the file |
2 | Master_log_name | Master_Log_File | The name of the master binary log currently being read from the master |
3 | Master_log_pos | Read_Master_Log_Pos | The current position within the master binary log that have been read from the master |
4 | Host | Master_Host | The host name of the master |
5 | User | Master_User | The user name used to connect to the master |
6 | User_password | Password (not shown by SHOW SLAVE STATUS) | The password used to connect to the master |
7 | Port | Master_Port | The network port used to connect to the master |
8 | Connect_retry | Connect_Retry | The period (in seconds) that the slave will wait before trying to reconnect to the master |
9 | Enabled_ssl | Master_SSL_Allowed | Indicates whether the server supports SSL connections |
10 | Ssl_ca | Master_SSL_CA_File | The file used for the Certificate Authority (CA) certificate |
11 | Ssl_capath | Master_SSL_CA_Path | The path to the Certificate Authority (CA) certificates |
12 | Ssl_cert | Master_SSL_Cert | The name of the SSL certificate file |
13 | Ssl_cipher | Master_SSL_Cipher | The list of possible ciphers used in the handshake for the SSL connection |
14 | Ssl_key | Master_SSL_Key | The name of the SSL key file |
15 | Ssl_verify_server_cert | Master_SSL_Verify_Server_Cert | Whether to verify the server certificate |
16 | Heartbeat | [None] | Interval between replication heartbeats, in seconds |
17 | Bind | Master_Bind | Which of the slave's network interfaces should be used for connecting to the master |
18 | Ignored_server_ids | Replicate_Ignore_Server_Ids | The number of server IDs to be ignored, followed by the actual server IDs |
19 | Uuid | Master_UUID | The master's unique ID |
20 | Retry_count | Master_Retry_Count | Maximum number of reconnection attempts permitted Added in MySQL 5.6.1) |
Slave的SQL线程负责维护relay-log.info文件,在MySQL5.6中relay-log.info包含文件中的记录数和复制延迟的秒数。
relaylog.info | slave_relay_log_info | SHOW SLAVE STATUS | Description |
1 | Number_of_lines | [None] | Number of lines in the file or rows in the table |
2 | Relay_log_name | Relay_Log_File | The name of the current relay log file |
3 | Relay_log_pos | Relay_Log_Pos | The current position within the relay log file; events up to this position have been executed on the slave database |
4 | Master_log_name | Relay_Master_Log_File | The name of the master binary log file from which the events in the relay log file were read |
5 | Master_log_pos | Exec_Master_Log_Pos | The equivalent position within the master's binary log file of events that have already been executed |
6 | Sql_delay | SQL_Delay | The number of seconds that the slave must lag the master |
设置master_info_repository和relay_log_info_repository参数:
SQL> stop slave;
SQL> set global master_info_repository=table;
SQL> set global relay_log_info_repository=table;
SQL> show variables like '%repository';
+--------------------------------------+---------+
| Variable_name | Value |
+--------------------------------------+---------+
| master_info_repository | TABLE |
| relay_log_info_repository | TABLE |
+--------------------------------------+----------+
查看向Master读取日志的情况:
SQL> select * from slave_master_info;
查看Slave的Relay日志应用情况:
SQL> select * from slave_relay_log_info;
注意:
l master-info-repository
master-info-repository={ FILE | TABLE },默认值是FILE,这个参数用于设置Slave节点上把master的信息写入到物理文件中还是写入到mysql. slave_master_info表中。
如果设置为FILE,也是mysql的默认设置,Slave会在datadir/master.info文件中记录master的信息,从MySQL5.6版本开始,建议使用TABLE模式。
l relay-log-info-reposity
relay-log-info-reposity=file|table,默认值是FILE,这个参数用于设置slave节点上把relay-log.info的信息写入到datadir/relay-log.info文件或者mysql. slave_relay_log_info表。
如果设置为FILE,也是mysql的默认设置,Slave会在datadir/master.info文件中记录master的信息,从MySQL5.6版本开始,建议使用TABLE模式。
l relay-log-recovery
relay-log-recover=0|1,默认值是0不开启,该参数用于设置是否开启relay log的自动恢复功能。当开启relay_log_recovery功能,slave数据库在启动的时候,会忽略未被执行的relay log,它会重新连接master获取relay log来进行恢复。
当slave发生宕机的时候,建议开启该功能,可以有效避免slave执行了relay log里面的讹误记录。
如果开启relay_log_recovery功能,必须同时把relay_log_info_reposity设置为TABLE模式。