MySQL日志导致磁盘空间不足问题
最近在检查一个监控监控系统发现磁盘空间不足,逐步检查发现是MySQL文件夹下数据暴增导致的,仔细发现时log文件太多日积月累造成的。于是想着怎么把这些过期的日志清理掉。
一、关闭log-bin文件
如果你不需要生成这些二进制文件,可以选择直接关闭二进制文件记录功能。在my.ini(windows
)或者my.cnf(linux)文件中找到log-bin=mysql-bin选项,将其注释掉即可。不过此举需要重拉进程,配置才会生效。
二、设置expire_logs_days
设置日志过期时间,进程会根据过期来自动删除日志,在my.ini(windows
)或者my.cnf(linux)文件中找到expire_logs_days选项,添加或修改expire_logs_days的值,默认0表示不删除。此举和关闭log-bin文件一样需要重拉进程。
三、修改全局变量expire_logs_days
在phpmyadmin中搜索expire_logs_days,修改其值。在生产环境中,重启mysql数据库往往会付出很高的代价。通过这种方式设置expire_logs_days虽然不需要重启mysql即可生效,但是该方式在重启mysql之后,值会被恢复。
如果没有安装phpmyadmin可视化工具,在命令行中也可以查看和修改。
show variables like "expire_logs_days";查看全局变量的值
set global expire_logs_days=60;设置全局变量的值
最后笔者在思考,如果要在一个深夜没有业务时重拉进程,避免人为熬夜去操作,到底干怎么实现自动化呢?定时任务关闭进程再开启进程,笔者使用的测试平台是XAMPP,可以使用自带的mysql_start.bat和mysql_stop.bat。
再mysql_stop.bat里面本质就是查询到mysqld的进程号,然后调用taskkill杀掉进程,因为只有一个进程当然可以使用taskkill /f /im mysqld.exe直接干掉。
mysql_start.bat脚本中,mysqld.exe需要进入到mysqld.exe目录中,切换到目录的环境变量中才能启动进程成功,不然会提示无法找到my.ini文件。
两个bat文件有了,可以中间加个延时,合并为一个bat,使用定时任务来调用这个文件,也可以先调用mysql_stop.bat,再mysql_start.bat。
如果要使用python来完成的话,其实和批处理区别不大,python也是使用 os.system,将字符串转化成命令在服务器上运行,底层原理一样。