记一次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文件列表 mysql> show master status; #查看当前正在写入的binlog文件 mysql> purge binary logs to “mysql-bin.000012”; #清除12前的binlog文件,对应binlog 存放目录下对应的文件会被删除,mysql-bin.index 文件对应的名字也会被清除 mysql> show variables like ‘expire_logs_days’; #查看 binlog自动删除规则 expire_logs_days = 0 为0,意思是不限制 mysql> set global expire_logs_days = 3; #动态设置binlog日志只保留3天 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进行操作。 |
错误信息