MySQL错误日志文件(Error log)占用空间过大,删除该文件后磁盘空间未刷新(未释放)。本文介绍了如何删除MySQL Error log文件释放磁盘空间,并分析导致日志文件不断增大的原因。
Linux磁盘空间满了,导致MySQL等服务无法启动。先用命令df -h
查看文件系统的整体磁盘使用量,发现磁盘空间使用完了。再用命令du -sh *
排查各个目录下占用空间比较大的文件,最后发现MySQL Error Log文件占用了大量空间(可使用命令 du -sh /opt/lampp/var/mysql/*
直接查看MySQL数据文件夹里各文件大小)。接下来介绍如何删除该文件释放空间,并查找什么原因导致MySQL Error log文件不断增大?
错误日志(Error Log)主要记录 MySQL 启动和停止过程中的信息、在运行过程中发生的故障和异常情况等。一般情况下,错误日志存储在 MySQL 数据库的数据文件夹下,通常名称为 hostname.err。其中,hostname 表示 MySQL 服务器的主机名。
在mysql5.5.7之后版本:直接复制error log日志文件备份即可。
在mysql 5.5.7之前版本:使用mysqladmin命令mysqladmin –u root –p flush-logs
或登录mysql数据库中使用 FLUSH LOGS
语句来开启新的错误日志
删除MySQL错误日志(Error log)之前,我们需要先停止MySQL服务,之后再删除错误日志文件。命令如下(需要修改为自己的数据库文件存储路径,并将hostname.err改为自己的error log文件):
[root@localhost ~]# /opt/lampp/lampp stopmysql
XAMPP: Stopping MySQL...ok.
[root@localhost ~]# cd /opt/lampp/var/mysql/
[root@localhost mysql]# rm -f hostname.err
[root@localhost mysql]# /opt/lampp/lampp startmysql
如果没有先停止MySQL服务就直接删除错误日志文件,将会导致文件已经删除但磁盘空间没有释放。
这是因为通过rm或者文件管理器删除文件,将会从文件系统的文件夹结构上解除链接(unlink)。然而假设文件是被打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用。需要找到已删除却仍在被占用的进程,然后kill掉。
使用命令 lsof | grep deleted
查找删除的错误日志文件占用的进程。比如下图找到的进程号为108466,之后执行 kill 1048466,再次查看磁盘空间,占用的空间就释放了。由于kill掉了MySQL服务相关进程,最好将MySQL服务重启一下,避免出问题。
正常情况下,MySQL错误日志文件并不会太大,该文件过大,可能是由于我们的MySQL运行有问题(没有影响MySQL正常使用)。通过分析该错误日志文件,我发现文件中不断写入以下内容。
2022-05-13 17:02:50 862 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'min_value' at position 3 to have type varbinary(255), found type varchar(255).
2022-05-13 17:02:50 862 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'max_value' at position 4 to have type varbinary(255), found type varchar(255).
在日志开头部分提示执行mysql_upgrade
指令修复。执行命令/opt/lampp/bin/mysqladmin -u root -p flush-logs
,输入mysql root密码,命令执行完后,再次查看error log文件,问题解决。