mysql数据库binlog日志自动清理及手动删除的方法

当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间。
mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
mysql-bin.000004
mysql-bin.000005

有三种解决方法:

1.关闭mysql主从,关闭binlog;

2.开启mysql主从,设置expire_logs_days;

3.手动清除binlog文件,> PURGE MASTER LOGS TO ‘MySQL-bin.010′;

实现:
1.关闭mysql主从,关闭binlog
# vim /etc/my.cnf //注释掉log-bin,binlog_format
# Replication Master Server (default)
# binary logging is required for replication
# log-bin=mysql-bin
# binary logging format – mixed recommended
# binlog_format=mixed
然后重启数据库

2.重启mysql,开启mysql主从,设置expire_logs_days
# vim /etc/my.cnf //修改expire_logs_days,x是自动删除的天数,一般将x设置为短点,如7
expire_logs_days = x //二进制日志自动删除的天数。默认值为0,表示“没有自动删除”
此方法需要重启mysql

当然也可以不重启mysql,开启mysql主从,直接在mysql里设置expire_logs_days
> show binary logs;
> show variables like ‘%log%’;
> set global expire_logs_days =7;

3.手动清除binlog文件
# /usr/local/mysql/bin/mysql -u root -p
> PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY); //删除10天前的MySQL binlog日志
> show master logs;

也可以重置master,删除所有binlog文件:
# /usr/local/mysql/bin/mysql -u root -p
> reset master;

2.PURGE MASTER LOGS手动删除用法及示例,MASTER和BINARY是同义词
> PURGE {MASTER | BINARY} LOGS TO ‘log_name’
> PURGE {MASTER | BINARY} LOGS BEFORE ‘date’
删除指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除MySQL BIN-LOG 日志,这样被给定的日志成为第一个。

实例:
> PURGE MASTER LOGS TO ‘MySQL-bin.000001’; //清除MySQL-bin.000001日志
> PURGE MASTER LOGS BEFORE ‘2019-01-12 18:00:00’; //清除2019-01-12 18:00:00前binlog日志
> PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY); //清除3天前binlog日志BEFORE,变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。

3.清除binlog时,对从mysql的影响
如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

6,891 views

发表评论