文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mysql数据库日志binlog保存时效问题(expire_logs_days)

2023-03-09 17:21

关注

一、设置语法

1、方法一

编辑/etc/my.cnf文件,在[mysqld]节点中增加如下两行

max_binlog_size = 500M
expire_logs_days = 15

2、方法二

-- mysql8.0以下版本查看当前数据库日志binlog保存时效 以天为单位,默认0 永不过期,最多只能设置99天
show variables like 'expire_logs_days';
set global expire_logs_days=60;

-- mysql8.0以上版本通过设置全局参数binlog_expire_logs_seconds修改binlog保存时间 以秒为单位;默认2592000 30天  14400  4小时;86400 1天;259200 3天
show variables like '%binlog_expire_logs_seconds%';

set global binlog_expire_logs_seconds=259200;

二、过期删除策略

总结:

通过下面的实验,对于mysql binlog过期删除策略,我们可以做出如下推测。

1. mysql是根据binlog文件的操作系统最近修改时间,来判断binlog是否过期(而不是根据binlog日志中事物发生的时间)。

2. 在触发mysql过期删除时,mysql先检查*bin.index文件,找到目前最老的binlog,然后检查该文件的系统时间,会有如下两种情况:

1) 如果发现该文件未过期,则认为目前没有binlog日志过期,不进行删除,即使此时有其他binlog已过期。

2) 如果发现该文件已经过期,则会找下一个binlog,判断是否过期,同样存在两种情况(过期或者未过期),如此往复,直到找到第一个过期的binlog 即停止继续查找,并删除该binlog及所有该binlog之前的所有日志

1)
mysql> show binary logs;
+-----------------+------------+
| Log_name    | File_size |
+-----------------+------------+
| 3306-bin.000006 | 1074742033 |
| 3306-bin.000007 | 1074580678 |
| 3306-bin.000008 | 1074739627 |
| 3306-bin.000009 | 250635228 |
| 3306-bin.000010 |    120 |
+-----------------+------------+
5 rows in set (0.00 sec)

2)
ls -lrt
total 7402312
-rw-r--r-- 1 root root    1747 Mar 25 10:06 test
-rw-rw---- 1 mysql mysql 1074742032 May 4 16:48 3306-bin.000006
-rw-rw---- 1 mysql mysql 1074580678 May 4 16:54 3306-bin.000007
-rw-rw---- 1 mysql mysql 1074739627 May 4 17:00 3306-bin.000008
-rw-rw---- 1 mysql mysql    168 May 4 17:00 3306-bin.index
-rw-rw---- 1 mysql mysql 250635182 May 4 17:02 3306-bin.000009
-rw-rw---- 1 mysql mysql  10448198 May 27 05:04 slow3306.log
-rw-r----- 1 mysql root   1096759 May 27 05:06 error3306.log
-rw-rw---- 1 mysql mysql 4093675902 May 27 05:06 general3306.log
##我们看到mysql目前保留着4个binlog日志,序号从6到9,当前正在使用的为序号为9的日志
set global expire_logs_days=7;
##在第1步中我们可以看到3306-bin.000006,3306-bin.000007,3306-bin.000008 三个日志都是属于过期的(因为3306-bin.000009是当前正在使用的日志,所以不是过期日志)
ls -lrt
total 7402312
-rw-r--r-- 1 root root    1747 Mar 25 10:06 test
-rw-rw---- 1 mysql mysql 1074580678 May 4 16:54 3306-bin.000007
-rw-rw---- 1 mysql mysql 1074739627 May 4 17:00 3306-bin.000008
-rw-rw---- 1 mysql mysql    168 May 4 17:00 3306-bin.index
-rw-rw---- 1 mysql mysql 250635182 May 4 17:02 3306-bin.000009
-rw-rw---- 1 mysql mysql  10448198 May 27 05:04 slow3306.log
-rw-r----- 1 mysql root   1096759 May 27 05:06 error3306.log
-rw-rw---- 1 mysql mysql 4093675902 May 27 05:06 general3306.log
-rw-rw---- 1 mysql mysql 1074742033 May 27 10:13 3306-bin.000006
##3306-bin.000006 日志文件已经系统日志已经变成当天时间
##我们知道flush logs;会触发过期日志清除操作
1) mysql> show binary logs;
+-----------------+------------+
| Log_name    | File_size |
+-----------------+------------+
| 3306-bin.000006 | 1074742033 |
| 3306-bin.000007 | 1074580678 |
| 3306-bin.000008 | 1074739627 |
| 3306-bin.000009 | 250635228 |
| 3306-bin.000010 |    120 |
+-----------------+------------+
5 rows in set (0.00 sec)

2) ls -lrt
total 7402316
-rw-r--r-- 1 root root    1747 Mar 25 10:06 test
-rw-rw---- 1 mysql mysql 1074580678 May 4 16:54 3306-bin.000007
-rw-rw---- 1 mysql mysql 1074739627 May 4 17:00 3306-bin.000008
-rw-r----- 1 mysql root   1096759 May 27 05:06 error3306.log
-rw-rw---- 1 mysql mysql 1074742033 May 27 10:13 3306-bin.000006
-rw-rw---- 1 mysql mysql  10448370 May 27 10:14 slow3306.log
-rw-rw---- 1 mysql mysql 4093676334 May 27 10:14 general3306.log
-rw-rw---- 1 mysql mysql 250635228 May 27 10:14 3306-bin.000009
-rw-rw---- 1 mysql mysql    120 May 27 10:14 3306-bin.000010
-rw-rw---- 1 mysql mysql    210 May 27 10:14 3306-bin.index
##我们发现3306-bin.000006,3306-bin.000007,3306-bin.000008三个日志并没有被删除(此时3306-bin.000006文件系统时间为当天,3306-bin.000007和3306-bin.000008文件时间都是4号)
1) mysql> purge master logs to '3306-bin.000007';

Query OK, 0 rows affected (0.31 sec)

2) mysql> show binary logs;
+-----------------+------------+
| Log_name    | File_size |
+-----------------+------------+
| 3306-bin.000007 | 1074580678 |
| 3306-bin.000008 | 1074739627 |
| 3306-bin.000009 | 250635228 |
| 3306-bin.000010 |    120 |
+-----------------+------------+
4 rows in set (0.01 sec)

3) ls -lrt
total 6352756
-rw-r--r-- 1 root root    1747 Mar 25 10:06 test
-rw-rw---- 1 mysql mysql 1074580678 May 4 16:54 3306-bin.000007
-rw-rw---- 1 mysql mysql 1074739627 May 4 17:00 3306-bin.000008
-rw-r----- 1 mysql root   1096759 May 27 05:06 error3306.log
-rw-rw---- 1 mysql mysql  10448370 May 27 10:14 slow3306.log
-rw-rw---- 1 mysql mysql 250635228 May 27 10:14 3306-bin.000009
-rw-rw---- 1 mysql mysql    120 May 27 10:14 3306-bin.000010
-rw-rw---- 1 mysql mysql    168 May 27 10:17 3306-bin.index
-rw-rw---- 1 mysql mysql 4093676603 May 27 10:17 general3306.log

##3306-bin.000006日志已经被删除
1) flush logs;

mysql> flush logs;
Query OK, 0 rows affected (0.30 sec)

2)查看 binlog

mysql> show binary logs;
+-----------------+-----------+
| Log_name | File_size |
+-----------------+-----------+
| 3306-bin.000009 | 250635228 |
| 3306-bin.000010 | 166 |
| 3306-bin.000011 | 120 |
+-----------------+-----------+
3 rows in set (0.00 sec)

ls -lrt
total 4253804
-rw-r--r-- 1 root root 1747 Mar 25 10:06 test
-rw-r----- 1 mysql root 1096759 May 27 05:06 error3306.log
-rw-rw---- 1 mysql mysql 250635228 May 27 10:14 3306-bin.000009
-rw-rw---- 1 mysql mysql 10448542 May 27 10:17 slow3306.log
-rw-rw---- 1 mysql mysql 4093676814 May 27 10:17 general3306.log
-rw-rw---- 1 mysql mysql 166 May 27 10:17 3306-bin.000010
-rw-rw---- 1 mysql mysql 120 May 27 10:17 3306-bin.000011
-rw-rw---- 1 mysql mysql 126 May 27 10:17 3306-bin.index

##此时我们发现3306-bin.000007,3306-bin.000008日志已经被自动删除
show binary logs;
show binlog events in 'mysql-bin.000002';
show binlog events;

最后

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯