技术帝的平台展示,网站建设、网站推广、SEO技术、网站优化、电子商务推广、平面美工和软件测试等技术干货分享。

Linux磁盘空间满了,如何通过删除MySQL错误日志(Error Log)释放空间

数据库 abel-lan 11℃ 0评论

概述

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文件不断增大?

MySQL日志文件太大
MySQL日志文件太大

解决方法

错误日志(Error Log)是什么?

错误日志(Error Log)主要记录 MySQL 启动和停止过程中的信息、在运行过程中发生的故障和异常情况等。一般情况下,错误日志存储在 MySQL 数据库的数据文件夹下,通常名称为 hostname.err。其中,hostname 表示 MySQL 服务器的主机名。

备份错误日志(Error log)

在mysql5.5.7之后版本:直接复制error log日志文件备份即可。

在mysql 5.5.7之前版本:使用mysqladmin命令mysqladmin –u root –p flush-logs 或登录mysql数据库中使用 FLUSH LOGS 语句来开启新的错误日志

删除错误日志(Error log)

删除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 Error log文件后未释放磁盘空间 - kill mysqld进程
删除MySQL Error log文件后未释放磁盘空间 – kill mysqld进程

问题原因 – 为什么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文件,问题解决。

MySQL upgrade执行结果
MySQL upgrade运行结果

转载请注明:半亩方塘 » Linux磁盘空间满了,如何通过删除MySQL错误日志(Error Log)释放空间

赞 (6)支付宝扫码打赏微信扫码打赏分享
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址