概念描述

一、RESET MASTER有什么影响?

对于启用了二进制日志记录的服务器(log_bin is on),RESET MASTER删除所有现有的二进制日志文件并重置二进制日志索引文件,将服务器重置为启动二进制日志记录之前的状态。将创建一个新的空二进制日志文件,以便可以重新启动二进制日志记录。

对于正在使用 GTID 的服务器(gtid_mode is on ),发出命令RESET MASTER 会重置 GTID 执行历史记录。
1、gtid_purged会被设置为空。
2、gtid_executed的全局值会被清空。
3、mysql.gtid_executed会被清除。

二、RESET SLAVE有什么影响?

1、RESET SLAVE命令会清空从副本复制的位点。
2、清空从库复制的元数据仓库。
3、删除所有的中继日志文件(relay_log),并新生成一个全新的中继日志(relay_log)。
4、会把从副本中设置的从库延迟(MASTER_DELAY) 重置为0。


reset slave命令进行两个动作:
1.清除 master.info,relay-log.info文件(记录)
2.删除所有的relay log,包括还没有应用完的日志,创建一个新的relay log文件。

reset slave all命令比reset slave多了清除主库连接信息:主库地址、端口、用户、密码,运行show slave status就输出为空了。

reset master命令进行两个动作:
1、清理所有的binlog文件,创建一个新的文件,起始值从1开始。
2、GTID环境中,reset master会清理掉gtid_executed的值


第一、reset slave命令和reset slave all命令会删除所有的relay log(包括还没有应用完的日志),创建一个新的relay log文件;
第二、使用reset slave命令,那么所有的连接信息仍然保留在内存中,包括主库地址、端口、用户、密码等。这样可以直接运行start slave命令而不必重新输入change master to命令,而运行show slave status也仍和没有运行reset slave一样,有正常的输出。但如果使用reset slave all命令,那么这些内存中的数据也会被清除掉,运行show slave status就输出为空了。
第三、reset slave和reset slave all命令会将系统mysql数据库的slave_master_info表和slave_relay_log_info表中对应的复制记录清除。
1、reset master操作有两个功能,一个是把binary log进行清空,并生成新的编号为000001的binary log
2、reset master会清空主库的GTID编号,在搭建主从的时候可以使用,但是要慎用(如果你的二进制日志还有需要的话)。


在MySQL中重建主主集群时,执行RESET MASTER语句是一个可选步骤,具体取决于你的需求和集群的当前状态。

RESET MASTER语句的作用是清除二进制日志,包括所有已写入的二进制日志文件和日志位置信息。执行这个语句会导致所有已有的二进制日志都被删除,集群的复制拓扑将会被重置。

如果你希望在重新搭建主主集群时完全清除旧的二进制日志,并从头开始进行数据同步和复制,那么执行RESET MASTER是一个合理的选择。

然而,如果你希望保留某些二进制日志文件和复制拓扑信息,或者正在重建集群的目的只是为了替换主节点而不涉及整个集群的重置,那么可以考虑不执行RESET MASTER。

需要注意的是,在执行RESET MASTER之前,请确保你已经完全备份了所有重要的数据和二进制日志文件,以防止数据丢失或无法恢复的情况发生。


测试验证

以下测试数据均为示例。

一、RESET MASTER验证

RESET MASTER前

show master status\G
********************1.row********************
     File:mysql-bin.000023
     Position:99865487
     Binlog_Do_DB:
     Binlog_Ignore_DB:
     Executed_Gtid_Set:572aa854-165f-11af-ed2a-b3500a256a8d:1-1165874,
...
..
..

RESET MASTER后

show master status\G
********************1.row********************
     File:mysql-bin.000001
     Position:110
     Binlog_Do_DB:
     Binlog_Ignore_DB:
     Executed_Gtid_Set:

二、RESET SLAVE验证

RESET SLAVE前

-rw-r---- 1 mysql mysql 740 Dec 11 15:33 relay-bin.016132
-rw-r---- 1 mysql mysql 401 Dec 11 15:33 relay-bin.016133
-rw-r---- 1 mysql mysql 100 Dec 11 15:33 relay-bin.index

show slave status\G
********************1.row********************
Slave_IO_State:
Master_host:aaaaa
Master_User:bbbbb
Master_port:3308
Connect_Retry:60
Master_Log_File:aa-bin.000056
Read_Master_Log_Pos:563
Relay_Log_File:relay-bin.016133
Relay_Log_Pos:401
Relay_Master_Log_File: aa-bin.000056
...
..
..
Executed_Gtid_Set:572aa854-165f-11af-ed2a-b3500a256a8d:1-1165874
...
..

RESET SLAVE后

-rw-r---- 1 mysql mysql 227 Dec 11 15:53 relay-bin.000001
-rw-r---- 1 mysql mysql  40 Dec 11 15:53 relay-bin.index
中继日志全被删除,并重新生成了全新的

show slave status\G
********************1.row********************
Slave_IO_State:
Master_host:aaaaa
Master_User:bbbbb
Master_port:3308
Connect_Retry:60
Master_Log_File:
Read_Master_Log_Pos:3
Relay_Log_File:relay-bin.000001
Relay_Log_Pos:3
Relay_Master_Log_File: 
...
..
..
Executed_Gtid_Set:572aa854-165f-11af-ed2a-b3500a256a8d:1-1165874
...
..
主库的连接信息还在,主库的binlog相关信息被清空,中继日志相关信息被清空。但GTID信息还在。

#如想将GTID清空,可以使用RESET SLAVE ALL,会将所有信息全部清空。

知识总结

1、RESET MASTER会丢失binlog文件和GTID信息,中断主从同步,谨慎使用。
2、RESET SLAVE必须先停止主从复制(stop slave),会清空中继日志,即使中继日志还没有副本的SQL线程执行完成。
3、RESET SLAVE ALL可以清空从库所有信息。