[技术干货] 记一次MySQL爆盘恢复操作

[复制链接]
乐维 发表于 2021-8-10 09:29:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
记一次MySQL爆盘操作记录
爆盘MySQL为测试环境下的zabbix的数据库,该环境MySQL原本设计为双主高可用架构MySQL,两台数据库的数据盘均为500G,如果按现有节点量级计算,500G挺富足的。
当天收到客户反馈测试的zabbix打不开了,经过排查,发现是zabbix的数据满了,数据无法写入导致,正纳闷500G测试环境应该绰绰有余的,怎么会有这么多数据呢?排查了数据库的数据目录文件大小,其中数据库的错误日志就有3G多,空间使用量最大的是binlog文件,共产生接近300G的binlog文件,跑到另一台MySQL上查看结果发现两边的数据库早就不同步,甚至两边的库都不一样了,主库还有一个zabbix1测试库,而从库上连zabbix1的测试库都没有,可想而知是有多久没同步了。
由于只是数据库无法写入数据了,依然可以进入数据库,但由于数据库已经满了,担心操作会造成数据库损坏,于是先请客户对硬盘进行扩容,扩容了50G后敢对数据库进行操作了。先用命令连接进入数据库(当时未进行截图,以下图片为后期测试所做)
#mysql -uroot -pp@ssw0rd
mysql> show binary logs;                 #获取binlog文件列表
图片1.png
mysql> show master status;         #查看当前正在写入的binlog文件
图片2.png
mysql> purge binary logs to “mysql-bin.000012”;                #清除12前的binlog文件,对应binlog 存放目录下对应的文件会被删除,mysql-bin.index 文件对应的名字也会被清除
图片3.png
mysql> show variables like ‘expire_logs_days’;     #查看 binlog自动删除规则
expire_logs_days = 0
0,意思是不限制
mysql> set global expire_logs_days = 3;                         #动态设置binlog日志只保留3天
图片4.png
mysql> show variables like ‘expire_logs_days’;     #查看 binlog自动删除规则
expire_logs_days = 0
0,意思是不限制
mysql> set global expire_logs_days = 3;                         #动态设置binlog日志只保留3天
由于两台MySQL已经不同步了,且该环境为测试环境,重启MySQL就好了。
另一台也同样操作,待两台MySQL都已正常后在进行同步配置即可。
现实场景中binlog的保存天数根据需求而定,还有千万别在MySQL数据库爆满的情况下随意关闭MySQL,尤其是当无法扩充硬盘的情况,一定要保证有一定空间供MySQL进行操作。





上一篇:启动tomcat报JAVA_HOME环境不存在问题处理
下一篇:zabbix使用JavaScript将date转换成时间戳
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子377

发布主题
最新发布

版权所有 © 2016-2021 九一乐维丨粤ICP备17007026号