栏目头部广告

MySQL Binlog日志清理

1、MySQL Binlog介绍

MySQL Binlog是以事件形式记录所有DDL(Data Definition Language 数据定义语言:Create、Drop和Alter)和DML(Data Manipulation Language 数据操控语言:Insert、Delete和Update)操作的二进制日志。

Binlog日志的两个重要的使用场景:

(1)MySQL主从复制

(2)数据库回档[数据恢复]

2、MySQL Binlog过期时间

MySQL默认Binlog过期时间是7天,这里需要注意:Binlog日志过期时间是按照最新一个Binlog时间t1减7,而不是当前时间减7。比如:今天是14号,而最新Binlog最后的修改时间是9号,那么几号之前的Binlog会被清理呢?答案可能有点出乎意料,没错是9-7=2,即2号之前的Binlog会被自动清理。

MySQL Binlog日志清理(图1)

3、MySQL Binlog日志清理

(1)查看binlog文件列表

show binary logs;

(2)查看当前写的binglog

show master status\G

(3)方式一:清理除比mysql-bin.000003日志更早的所有binlog日志文件

purge binary logs to "mysql-bin.000003";

(4)方式二:清理begin_time时间点前的日志

purge binary logs before "$begin_time";

日期格式:'2018-02-01 12:00:00';

4、MySQL Binlog日志定时清理脚本

4.1 背景介绍

生产环境中,我们经常会遇到MySQL数据库日志占满磁盘的情况,比如,MySQL数据迁移或者高IO读写的MySQL实例等。经过分析,可以发现占满磁盘的都是binlog日志,那么我们有什么办法可以定期去清理这些日志呢?

  • 通过修改expire_logs_days参数。
  • 通过定时脚本去清理。

【注意】当然MySQL有自带binlog清理机制,通过修改expire_logs_days即binlog过期时间进行控制。但是由于该参数的取值范围是1-31天,所以无法精确清理小时级别的日志。

4.2 .sh脚本案例

[root@blogs-v2 ~]# vim /home/purge_binary_logs.sh
while /bin/true; do    
    time=$(date "+%Y-%m-%d %H:%M:%S" -d "-16hour")                             # 把-16改成需要清理n小时前的binlog的n的值即可 
    mysql -e "purge binary logs to ${time}" -h$ip -P$port -u$user -p$passward  # 把$ip,端口$port,用户名$user,密码$passward改成对应MySQL实例的
    sleep 5                                                                    # 把5改成需要的间隔时间
done

4.3 Crontab设置方法

[root@blogs-v2 ~]# vim /etc/crontab

定时任务写法.png

  • 每三小时执行一次定时脚本
  • 分、时、日、月、周、用户、执行的命令

作者:UStarGao
链接:https://www.starcto.com/mysql/84.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`