今天因为mysql.log占用空间非常大。40多个G。然后就直接删除了 (注意,严格来说是不能全部删除的,可能有有用信息,任何日志都一样)
删除后竟然没有释放空间,可能mysql正在使用这个日志,但是又不能用 service mysqld restar 来重启mysql,因为会短时间内终止服务,或许还有其他问题(例如主从同步之类的),所以要平滑重启mysql.
生产环境中的mysql server, 一般情况下,是要尽量避免重启的
但又时间却又面临这种场景
mysql的慢日志,错误日志需要定时切割出来。
一些影响性能的参数需要微调,我们希望mysql能平滑地加载新配置而不中断服务
其实,只要给mysqld进程发送-HUP信号即可,mysqld接收到这个信号后,会重新生成日志
或使用 service mysqld reload 也可
另外一些参数微调,建议是在mysql CLI方式下使用 set global NAME=Value方式设置好之后,再将其保存到/etc/my.cnf配置文件中
注意补充:如果不释放空间,可以结合lsof来操作。有次发现,删除mysql.log查询日志后,用 service mysqld reload 并没有释放空间,但是重新加载成功。解决方法:进入配置文件后,注释掉log=file,然后保存退出,再service mysqld reload,重新加载后,再删除日志。然后再重新开启log=file,再用service mysqld reload
还有一种方法:如果移除了mysql的日志
/usr/local/mysql/bin/mysqladmin -uroot -p·cat /data/save/mysql_passwd· --socket=/tmp/mysql.sock flush-logs #flush-logs 洗掉所有日志
最好非常大的日志文件不要直接 rm -rf 掉,这样有失专业,请看另一篇 mysql 日志切割