问题描述
在使用Ubuntu系统时,发现磁盘空间异常地被填满。通过使用ncdu工具进行检查,结果显示/var/lib/mysql
文件夹占用了高达63GB的存储空间。
进一步查看该目录,发现存在几百个以binlog为前缀的文件。
原因分析
这些以binlog为前缀的文件,实际上是MySQL的二进制日志(binlog)文件。二进制日志记录了数据库中所有更改的详细信息,包括但不限于对数据的插入、删除、更新,对表和数据库的创建、更改、删除等操作。每一次这样的操作都会在二进制日志中生成一个新的日志事件,并被写入到一个新的二进制日志文件中。因此,如果数据库的活动量较大,二进制日志文件将会迅速增长,可能占用大量的磁盘空间。
此外,MySQL的二进制日志是持久化存储的,除非手动删除或者设置了自动过期(通过expire_logs_days
配置项),否则这些日志文件将会永久保留在磁盘上。如果没有定期清理旧的二进制日志文件,这些文件将会累积起来,占用更多的磁盘空间。
因此,为了避免磁盘空间被耗尽,需要定期清理旧的二进制日志文件,或者设置二进制日志的自动过期。
解决方案
- 查看日志文件列表
SHOW BINARY LOGS;
列出服务器上的所有二进制日志文件。
注意,只有具有 REPLICATION CLIENT
权限的用户才能执行 SHOW BINARY LOGS;
命令。
- 查看当前正在使用的日志文件
SHOW MASTER STATUS;
显示关于主服务器二进制日志的信息。这个命令通常在配置复制时使用,以获取当前二进制日志文件的名字和位置。这些信息将被用于在从服务器上指定复制应该从哪里开始。
注意,只有具有 REPLICATION CLIENT
权限的用户才能执行 SHOW MASTER STATUS;
命令。
可以看到我的数据库正在使用的日志文件是binlog.000777。
- 删除其他日志文件
purge binary logs to 'binlog.000777';
用于清理磁盘空间,因为二进制日志文件可能占用大量的磁盘空间。在大多数情况下,你不需要保留所有的二进制日志文件,特别是那些已经被备份和复制的旧日志文件。
注意
- 只有具有
SUPER
权限的用户才能执行PURGE BINARY LOGS
命令。 - 将binlog.000777替换为你查询到的正在使用的日志文件的文件名。
- 再次查看日志文件列表
SHOW BINARY LOGS;
可以看到只剩下binlog.000777了。
清理日志文件后,可以看到/var/lib/mysql目录只剩下200多MB了,果然磁盘空间杀手是MySQL的binlog文件。
参考资料
https://blog.csdn.net/sinat_14982831/article/details/74738737