背景
在k8s
上部署一主两从
mysql集群架构,使用动态持久卷各分配100G
卷空间。MySQL版本使用8.0.26
。binlog日志并没有做限制。
上线一段时间后,通过查看卷空间发现mysql binlog
目录满了,数据库处于lock状态已无法正常响应了。
处理流程
最初登录进数据库,想通过purge命令清理不行,此时数据库已经hang住。通过mysql 命令清除日志不行,尝试通过系统命令先把几个binlog 日志mv 到/tmp目录下面。
mv /var/lib/mysql/mysql-0-bin.000078 /tmp
此时发现,系统已经释放出1G的空间。再次登录数据库执行purge命令清理。
手动清除binlog文件
# 登录mysql数据库
mysql -u root -p
# 查看当前bin log
show master logs;
# 每个mysql节点都要执行下
# 删除10天前的MySQL binlog日志
PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY);
# 再次查看bin log
show master logs;
也可以重置master,删除所有binlog文件:
mysql -u root -p
# 谨慎操作
reset master;
配置自动清理
# 只保留7天内的 binlog 文件
mysql> set global binlog_expire_logs_seconds=60*60*168;
操作说明
- 操作前最好备份数据库
- 不推荐直接在
/var/lib/mysql
路径下,将binlog.0*
删除掉,因为手动删除并不会更新binlog.index
,而 binlog.index 的作用是加快查找 binlog 文件的速度。
参考文档
- 清理 MySQL 的 binlog.md