数据库 / MySQL

MySQL Binlog日志的清理方案

温馨提示:本文最后更新于2021-03-02 18:46:27,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 9月20日 · 2020年 · 本文1431个字,预计阅读4分钟 76520次已读

一、自动清理

当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间。我们就需要设置binlog日志过期时间。

方式1:修改配置文件my.cnf

[root@localhost ~]# vim /etc/my.cnf     #修改expire_logs_days,x是自动删除的天数,一般将x设置为短点,如10
[mysqld]
...
expire_logs_days = x  #二进制日志自动删除的天数。默认值为0,表示“没有自动删除”

方式2:直接在数据库里修改

mysql> show variables like "%expire_logs_days%";
mysql> set global expire_logs_days = 10;
image 110

二、手动清理

说明:清理之前一定要看下从库当前正在读取的是哪个binlog文件,然后确定读取的文件后再进行手动清理,或者在进行清理binlog文件之前先把binlog文件进行备份。

[root@localhost ~]# mysql -uroot -p	#登入到从库查看当前读取的binlog
mysql> show slave status\G
Relay_Master_Log_File: master-bin.004337

[root@localhost ~]# mysql -uroot -p	#登入到主库进行清理
#查看正在写的binlog文件
mysql> show master logs;
mysql> show binary logs;
mysql> show variables like "%expire_logs_days%";

mysql> PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 5 DAY);    #清除5天前的binlog日志文件

三、参数说明文章来源(Source):https://www.dqzboy.com

文章来源(Source):https://www.dqzboy.com

1、expire_logs_days

本文中的 X 表示是你想要保留的天数。我推荐10个,但这取决于MySQL服务器的繁忙程度和日志文件的增长速度。只要确保它比最慢的奴隶从你的主人复制数据要长。只是附带说明一下:您知道无论如何都应该这样做,但是要确保备份了mysql数据库。在某些情况下,二进制日志可以用来恢复数据库;因此,备份可以确保在数据库服务器崩溃时能够恢复数据。

2、PURGE MASTER LOGS

删除指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除MySQL BIN-LOG 日志,这样被给定的日志成为第一个。

示例:

> PURGE MASTER LOGS TO 'MySQL-bin.010';  //清除MySQL-bin.010日志
> PURGE MASTER LOGS BEFORE '2020-05-01 13:00:00';   //清除2020-05-01 13:00:00前binlog日志
> PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 5 DAY);  //清除5天前binlog日志BEFORE,变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。

3、清Binlog时对从库的原文链接:https://www.dqzboy.com影响

如果你文章来源(Source):浅时光博客有一个活性的从服务器,该从服务器当前正在读取的binlog日志如果是你正在试图删除的日志之一,则本语句不会起作用,而是文章来源(Source):浅时光博客会失败,并伴随一个错误。不过,如果从服务器是休止的,并且你碰巧清理了其想要读取的日志之一,则从服务器启动后不能复制。当从服务器正在复制时,本语句可以安全运行。你不需要停止它们。




本文作者:浅时光
原文链接:https://www.dqzboy.com/2533.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息

0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!