加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

如何解决 mysql数据的库日志binlog存放时效问题?

发布时间:2023-07-05 15:09:52 所属栏目:MySql教程 来源:
导读:本篇内容介绍了“mysql数据库日志binlog保存时效问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能
本篇内容介绍了“mysql数据库日志binlog保存时效问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
 
一、设置语法
 
1、方法一
 
编辑/etc/my.cnf文件,在[mysqld]节点中增加如下两行
 
max_binlog_size = 500M
 
expire_logs_days = 15
 
max_binlog_size:bin log日志每达到设定大小后,会使用新的bin log日志。如mysql-bin.000002达到500M后,创建并使用mysql-bin.000003文件作为日志记录。
 
expire_logs_days:保留指定日期范围内的bin log历史日志,上示例设置的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. 查看数据库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的日志
 
2. 设定binlog过期时间
 
set global expire_logs_days=7;
 
##在第1步中我们可以看到3306-bin.000006,3306-bin.000007,3306-bin.000008 三个日志都是属于过期的(因为3306-bin.000009是当前正在使用的日志,所以不是过期日志)
 
3. 修改3306-bin.000006文件系统时间
 
使用 vi 查看3306-bin.000006文件,不做任何修改保存退出。
 
4. 修改后查看binlog文件时间
 
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 日志文件已经系统日志已经变成当天时间
 
5. flush logs;
 
##我们知道flush logs;会触发过期日志清除操作
 
6. 查看现有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 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号)
 
7. purge 最早的3306-bin.000006日志
 
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日志已经被删除
 
8. 再次flush logs;
 
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日志已经被自动删除
 
9.获取binlog文件列表
 
show binary logs;
 
查看指定binlog文件的内容
 
show binlog events in 'mysql-bin.000002';
 
只查看第一个binlog文件的内容
 
show binlog events;
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!