mysql binlog的清理

Linux磁盘空间占满解决方法

查询整体磁盘使用情况命令

df -h

➜  / df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.8G     0  3.8G   0% /dev
tmpfs           3.8G     0  3.8G   0% /dev/shm
tmpfs           3.8G  393M  3.5G  11% /run
tmpfs           3.8G     0  3.8G   0% /sys/fs/cgroup
/dev/vda1        40G   30G  7.2G  81% /
tmpfs           777M     0  777M   0% /run/user/1000

查询某个目录下各文件夹或文件大小

sudo du -sh *

/ sudo du -sh * 
0	bin
211M	boot
...
2.2G	usr
26G	var

然后进入/var目录下,继续使用该命令查看,发现是binlog过多导致,需要删除binlog日志。

清理mysql binlog

mysql的binlog必不可少,但是不清理的话,小云盘经受不住每天频繁的插入删除。所以binlog日志还需要删除。

mysql> show variables like ‘%expire%’;

mysql binlog的清理_第1张图片

查询上述参数后发现在MySQL 8.0.12版本中默认开启binlog日志并设置为binlog_format=row,binlog失效日期参数为 binlog_expire_logs_seconds,默认30天过期。

注释:
在MySQL8.0 版本中新增参数binlog_expire_logs_seconds,可以精确到秒,而此前版本中expire_logs_days的单位为天,最小值为1,在MySQL8.0 GA中此参数标记为deprecated 。
在MySQL 8.0 GA版本默认使用binlog_expire_logs_seconds,时间为2592000秒,30天。

  • 若在MySQL启动时inlog_expire_logs_secondsexpire_logs_days 都没设置值,则使用默认值的 binlog_expire_logs_seconds值,即30天;
  • 若在MySQL启动时binlog_expire_logs_seconds或者expire_logs_days其中一个设置为非0值则非0值的参数作为binlog日志失效期;
  • 若在启动时binlog_expire_logs_secondsexpire_logs_days参数都设置为非0值则使用binlog_expire_logs_seconds值,expire_logs_days值则失效并对其发出告警信息。

若要关闭自动清除binlog文件的功能则需要显示指定binlog_expire_logs_seconds=0 并且不设置expire_logs_days的值。
为了兼容早期版本若显示指定了expire_logs_days =0而没有指定binlog_expire_logs_seconds的值,此时自动清理binlog日志则是 禁用 的,并且此时binlog_expire_logs_seconds的默认值不适用。

手动删除日志

手动清理当然指的不是 rm -rf ** ,这样可能会导致 binlog.index 错乱。

mysql -uroot -p # 登陆mysql
show binary logs; # 查看日志文件
show master status; # 查看正在使用的日志文件:binlog.000015
purge binary logs to 'binlog.000015'; # 删除binlog.000015文件以外的日志文件

设置过期时间

设置过期48小时

mysql> set global binlog_expire_logs_seconds=60*60*48;
mysql> flush logs; # 刷一下log使上面的设置生效,否则不生效。注意:此配置重启mysql后失效。

你可能感兴趣的:(java,mysql,数据库,java)