MySQL里RESET命令行用于清除各种MySQL的服务的状态。可以说RESET命令是FLUSH语句的更强版本,同时也属于高危谨慎执行命令。
目前支持的RESET命令行如下:
RESET MASTER
删除binlog_index文件列表里的binlog文件,同时创建新的binlog文件。当然同时也会重置GTID。
对于复制存在的节点上执行,其实非常致命。
- binlog被清除,GTID被重置:

- 这个动作也会影响主从复制,后续的同步就需要重新配置:

- 同时binlog被清除,操作记录被丢失。
到了MySQL8.4版本可以指定binlog文件的index, 到MySQL9.0版本。命令行取消,改成RESET BINARY命令。使用上更细节,更方便。
# RESET MASTER [TO binary_log_file_index_number]
mysql> SHOW BINARY LOGS;
+-------------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+-------------------+-----------+-----------+
| source-bin.001234 | 154 | No |
+-------------------+-----------+-----------+
mysql> RESET MASTER TO 1234;
RESET SLAVE/REPLICA
删除复制进程配置,清除复制源数据存储信息。同时对应的Relay日志文件会被删除,即使Relay尚未被复制SQL线程完全执行。
需要先停止复制进程STOP SLAVE/REPLICA,之后在执行。在多个复制源中也可以指定频道,进行清除动作。
mysql> RESET SLAVE ALL
#或
mysql> RESET SLAVE FOR CHANNEL channel
在my.cnf配置 master_info_repository=TABLE ,master_info_repository=FILE 下更改mysql.slave_master_info,mysql.slave_relay_log_info相关的复制信息。
RESET PERSIST
删除持久化全局变量,同时清除数据目录中的mysqld-auto.cnf文件中的参数设置。只是存的去除配置参数,不会更改运行环境中的设置值。
mysql> RESET PERSIST;
mysql> RESET PERSIST system_var_name;
mysql> RESET PERSIST IF EXISTS system_var_name;
RESET BINARY LOGS AND GTIDS(MySQL9.0)
到了MySQL9.0版本可以指定binlog文件和 GTID
RESET BINARY LOGS AND GTIDS [TO binary_log_file_index_number]
mysql> SHOW BINARY LOGS;
+------------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+------------------+-----------+-----------+
| mysql-bin.000001 | 205 | No |
| mysql-bin.000002 | 158 | No |
+------------------+-----------+-----------+
2 rows in set (0.00 sec)
mysql> RESET BINARY LOGS AND GTIDS to 2;
Query OK, 0 rows affected (0.01 sec)
总结
MySQL中RESET命令行在一些复制故障案例能起到很好的作用。但使用还需要谨慎。建议做好一些常规备份,已被不时之需。
最后修改时间:2024-11-11 17:48:32
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




