MySQL日志系列(2):binlog日志管理

目录

传送门

binlog

日志索引文件

 查看当前日志文件SQL命令

 binlog日志文件更新

binlog日志文件删除

自动删除日志文件配置

手动删除日志文件

暂时停止binlog日志

使用binlog恢复数据


传送门

在前面讨论过MySQL的各种日志MySQL日志系列(1):MySQL各种日志

这里重点讨论一下binlog日志

binlog

binlog就是通常意义的二进制日志,文件一般是binlog.index文件(文件名称可以自定义)

前面介绍了如何配置及查看日志,具体可查看MySQL日志系列(1):MySQL各种日志

日志索引文件

binlog日志生成的时候,一般会有一个binlog.index文件,这个文件并不存储真正的日志,而是binlog日志的索引文件,可以打开查看一下内容

 其中的binlog.000001~binlog.000016就是具体的日志文件,在同一个日志目录中

 查看当前日志文件SQL命令

除了可以在服务器的MySQL日志目录查看日志文件以外,还可以通过日志命令查看

show BINARY logs;

 binlog日志文件更新

binlog日志文件以"000001"结尾,一般日志文件个数跟MySQL启动次数相同,就是说,每启动一次就会生成一个新的日志文件,并且序号递增。

比如现在重启一次MySQL

service mysql restart

再查看一下日志文件,会发现新增了一个日志文件,binlog.000017

 一般生产是很少重启MySQL服务器的,都是运行特别长时间的服务,那如果都记录在一个文件中,会造成文件特别大,所以可以通过配置日志文件大小来切割文件:在MySQL配置my.cnf里面设置参数:max_binlog_size = 100M,这种,表示如果文件达到100M兆,就会生成的新的文件。注意这里的大小一般不能超过1G或者小于4096B,默认为1G

binlog日志文件删除

MySQL提供了2种删除日志文件的方式,自动和手动。

自动删除日志文件配置

在MySQL配置my.cnf里面设置参数:expire_logs_days = 10,表示10天之后自动删除日志文件,不配置默认为0,表示不删除

手动删除日志文件

全部删除

手动删除日志,当然不是直接rm删除,而是通过MySQL提供的安全删除SQL命令去执行

reset master

执行该命令会删除所有的binlog文件,并且会重新生成,序号从"000001"开始

指定范围删除

-- 删除比文件名编号小的所有日志文件
purge master logs to 'log_name';
-- 删除指定日期之前的所有日志
purge master logs before 'date';

比如,删除指定"binlog.000018"日志文件以前的所有日志

PURGE MASTER logs to 'binlog.000018';

文件编号小于18的都被删除了

具体命令可以参考SQL Statements for Controlling Replication Source Servers

暂时停止binlog日志

binlog日志是默认关闭的,在配置文件中一旦配置开启之后,就无法关闭了。

必须通过修改配置文件,并且重启MySQL服务器才能停止。不过可以通过SQL命令临时停止binlog日志功能:

SET sql_log_bin = 0;

然后将值改为1,又恢复binlog日志记录。

比如,先关闭binlog日志功能,然后插入nacos库一条记录

INSERT INTO `nacos`.`config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`, `encrypted_data_key`) 
VALUES ('13', 'test13', 'DEFAULT_GROUP', 'test:\r\n  id: aa', 'e761ae7c0bf7356db9d8104423581b6b', '2022-06-18 14:40:49', '2022-06-18 14:40:49', 'nacos', '112.45.96.24', '', '', NULL, NULL, NULL, 'yaml', NULL, '');

然后查看一下binlog日志文件binlog.000019,没有任何变化 ,开启binlog日志之后,再插入一条记录

INSERT INTO `nacos`.`config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`, `encrypted_data_key`) 
VALUES ('14', 'test14', 'DEFAULT_GROUP', 'test:\r\n  id: aa', 'e761ae7c0bf7356db9d8104423581b6b', '2022-06-18 14:40:49', '2022-06-18 14:40:49', 'nacos', '112.45.96.24', '', '', NULL, NULL, NULL, 'yaml', NULL, '');

然后查看一下binlog日志文件binlog.000019,日志文件增加了 

即可以通过SQL命令动态的暂停/恢复binlog日志记录功能

SET sql_log_bin = {0 | 1};

使用binlog恢复数据

binlog的一大功能就是用来恢复数据,如果MySQL数据意外丢失,可以用binlog日志来恢复,SQL命令为

mysqlbinlog [option] filename | mysql -uuser -ppass

其中

  • option是一些可选参数,比较重要的两对是--start-date,--stop-date和--start-position,--stop-postion:分别代表恢复的起始时间,起始位置

比如,对于刚才的那张表`nacos`.`config_info`,现在的数据是5条数据

刚才插入"test14"这条数据时,是开启了binglog日志的,"test13"是没有记录的。

现在先关闭临时关闭binlog日志功能

SET sql_log_bin = 0;

然后删除data_id为"test13","test14"这2条数据

DELETE from `nacos`.`config_info`  where data_id in('test13','test14');

现在再查询一下表`nacos`.`config_info`,刚才2条数据没有了 

现在执行一下恢复命令,

./mysqlbinlog --skip-gtids=true /data/mysql/bin_log/binlog.000001 | ./mysql -uroot -p
  • 注意可能要加--skip-gtids=xxx参数

具体原因可参考:mysqlbinlog 恢复数据没生效_雅冰石的博客-CSDN博客_mysqlbinlog恢复数据失败

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值