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会被自动清理。
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
- 每三小时执行一次定时脚本
- 分、时、日、月、周、用户、执行的命令
作者:UStarGao
链接:https://www.starcto.com/mysql/84.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2023-08-12Windows Server快速关闭自动更新功能
- 2021-11-04MySQL的多表联合查询
- 2021-03-05MySQL 用户与权限管理
- 2021-08-23开源Yapi接口管理平台容器化部署
- 2021-02-21云计算