reset slave

  1. 清理掉master.info
  2. 清理relay-log.info
  3. 删除所有的relay log文件,重启用一个新的relay log文件
  4. 不清理内存里的同步复制配置信息。清除slave 复制时的master binlog的位置,重置复制延迟(CHANGE MASTER TO 的 MASTER_DELAY参数指定的)为0,不会改变复制连接使用的参数,例如master host, master port, master user, or master password
  5. 不重置 gtid_executed or gtid_purged 参数值

依然显示slave状态

mysql> reset slave;
Query OK, 0 rows affected (0.03 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: orch03
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: 
          Read_Master_Log_Pos: 4
               Relay_Log_File: mysql-relay.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: 
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 0
              Relay_Log_Space: 177
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 17250413
                  Master_UUID: 
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: 
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

reset slave all

  1. 清理掉master.info
  2. 清理relay-log.info
  3. 删除所有的relay log文件,重启用一个新的relay log文件
  4. 立即清理内存里的同步复制配置信息。这一点很有用:提升从库为主库,特别是在集群迁移中,新集群的新主库同步了旧集群的旧主库后,需要断开,则执行
  5. 不重置 gtid_executed or gtid_purged 参数值

不再显示slave状态

mysql> reset slave all;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G
Empty set (0.00 sec)

重置前relay-log状态

[root@mysql01 data]# more relay-log.info 
7
/data/mysql/log/relay/mysql-relay.000005
313
mysql-bin.000001
830
0
0
1

[root@mysql01 data]# ll /data/mysql/log/relay/
total 12
-rw-r----- 1 mysql mysql 362 Feb 27 03:08 mysql-relay.000004
-rw-r----- 1 mysql mysql 313 Feb 27 03:08 mysql-relay.000005
-rw-r----- 1 mysql mysql  82 Feb 27 03:08 mysql-relay.index

重置slave状态

stop slave;
reset slave all;
show slave status\G;

重置后relay-log状态

[root@mysql01 data]# more relay-log.info 
relay-log.info: No such file or directory
[root@mysql01 data]# ll /data/mysql/log/relay/
total 8
-rw-r----- 1 mysql mysql 177 Feb 27 03:38 mysql-relay.000001
-rw-r----- 1 mysql mysql  41 Feb 27 03:38 mysql-relay.index

此时真正实现了清除slave同步复制关系! mysql主从复制中,需要将从库提升为主库,需要取消其从库角色,这可通过执行RESET SLAVE ALL清除从库的同步复制信息、包括连接信息和二进制文件名、位置。从库上执行这个命令后,使用show slave status将不会有输出。
在mysql 5.6.3之后,可以使用reset slave all来清除连接参数,运行show slave status就输出为空了。
mysql 5.6.7之后,reset slave会隐式提交事务。
运行reset slave命令需要reload权限。MHA在做故障切换时,就会在新主上运行命令RESET SLAVE /*!50516 ALL */ ,清除掉它的所有从库信息。

reset master

1)删除binlog索引文件中列出的所有binlog文件
2)清空binlog索引文件
3)创建一个新的binlog文件
4)清空系统变量gtid_purged和gtid_executed, 在MySQL 5.7.5 及后续版本中, RESET MASTER还会清空 mysql.gtid_executed数据表。

重置前gtid_executed及binlog状态

mysql> select * from mysql.gtid_executed;
+--------------------------------------+----------------+--------------+
| source_uuid                          | interval_start | interval_end |
+--------------------------------------+----------------+--------------+
| 8524392d-a3e7-11ed-a049-080027176425 |              1 |            2 |
| 85459f0b-a3e7-11ed-a049-080027176425 |              1 |            1 |
| e4975156-a3d4-11ed-8351-080027176425 |              1 |            2 |
+--------------------------------------+----------------+--------------+
3 rows in set (0.00 sec)
[root@mysql01 data]# ll /data/mysql/log/binlog/
'total 24
-rw-r----- 1 mysql mysql 201 Feb 27 03:45 mysql-bin.000001
-rw-r----- 1 mysql mysql 201 Feb 27 03:45 mysql-bin.000002
-rw-r----- 1 mysql mysql 201 Feb 27 03:45 mysql-bin.000003
-rw-r----- 1 mysql mysql 201 Feb 27 03:45 mysql-bin.000004
-rw-r----- 1 mysql mysql 154 Feb 27 03:45 mysql-bin.000005
-rw-r----- 1 mysql mysql 200 Feb 27 03:45 mysql-bin.index

重置master状态

mysql> reset master;
Query OK, 0 rows affected (0.06 sec)

重置后gtid_executed及binlog状态

mysql> select * from mysql.gtid_executed;
Empty set (0.00 sec)
[root@mysql01 data]# ll /data/mysql/log/binlog/
total 8
-rw-r----- 1 mysql mysql 154 Feb 27 03:47 mysql-bin.000001
-rw-r----- 1 mysql mysql  40 Feb 27 03:47 mysql-bin.index

用途:删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件。用于第一次进行搭建主从库时,进行主库binlog初始化工作;

注意:但是如果当前是主数据库,且主从数据库正常的时候,千万不能用这种方式删除。

应用场景

场景一:给原集群添加一个新实例作为从库。(从xtrabackup备份来搭建)
当启动新的实例后按如下顺序执行:

stop slave;
reset slave all;
reset master;
change master (根据实际情况而定)
start slave;
show slave status\G;

场景二:
集群迁移。(新集群的新主库连接到旧集群的旧主库上)
当新集群数据与旧集群数据完全同步后,在新集群的新主库上按如下顺序执行:

stop slave;
reset slave all;
show slave status\G;