如何清理日志或找到最大的文件并减少空间?我也不明白1.7T竟然没有在这个关键时刻使用。
Mysqld 未运行,因为 99% 已使用。
# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 20G 19G 279M 99% /
/dev/root 20G 19G 279M 99% /
devtmpfs 32G 268K 32G 1% /dev
/dev/md3 1.8T 196M 1.7T 1% /home
tmpfs 32G 0 32G 0% /dev/shm
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/named
/dev/root 20G 19G 279M 99% /var/named/chroot/var/named
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/named.conf
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/named.rfc1912.zones
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/rndc.key
/dev/root 20G 19G 279M 99% /var/named/chroot/usr/lib64/bind
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/named.iscdlv.key
/dev/root 20G 19G 279M 99% /var/named/chroot/etc/named.root.key
答案1
MySQL 数据存储在/var/lib
.中已经没有空间了/var
。 MySQL 无法启动。其实很简单。看看/var/log
并清理它。我会推荐类似的东西(删除gz
中的所有文件/var/log
):
$ find /var/log -iname "*.gz" -delete
当然,您可能想先检查删除的内容:
$ find /var/log -iname "*.gz"
1.7TB 分配给/home
.然而并非/var
如此/home
。所以/home
没有被使用。也很简单。
/var
当您设置系统时,您显然应该在一个更大的分区上分开。现在,我能遇到的最佳解决方案是将 MySQL datadir 移动到更大的分区 ( /home
) :
$ mv /var/lib/mysql /home
$ ln -s /home/mysql /var/lib/mysql
如果您不想使用链接,则应重新配置 MySQL 以使用存储在/home
.编辑/etc/mysql/my.cnf
并更改此内容:
datadir = /var/lib/mysql
对此:
datadir = /home/mysql
现在 MySQL 有可用空间,它应该可以顺利启动。如果您托管如此重要的数据库,您确实应该重新考虑您的分区方案。
您可能还想调查日志的内容,因为如果一切顺利,应用程序不应该向日志写入太多内容。有些东西可能在某个地方难以正常工作。
答案2
这是查找最大文件的有用命令:
du -ak /var | sort -nr | less
用法:
du -ak
-a
汇总分区中所有 ( ) 文件的磁盘使用情况/var
并打印大小(以千字节为单位) ( -k
)。
sort -nr
连接文件列表并将它们按相反 ( -r
) 数字 ( -n
) 顺序排序。
less
将对输出进行分页,以便您可以在顶部看到最大的违规者,并在列表中前后移动。
答案3
我想指出,这也可能是 mysql 二进制日志的问题,而不是数据库文件本身的问题。在许多情况下,Binlog 默认放置在 /var/log/mysql 目录中,它们往往比数据库文件消耗几倍的磁盘空间。这是因为二进制日志存储所有 SQL 数据修改查询(UPDATE、INSERT 等)以跟踪数据库数据更改。不应通过 shell rm 命令直接删除 Binlog,而只能通过正在运行的数据库引擎上的 mysql 命令来删除。为此,mysql 服务器必须启动。我认为将 /var/lib/mysql 目录移动到 /home 分区应该可以释放 / 分区上足够的空间,使 mysql 服务器能够启动。因此,程序应该如下:
- 按照@John WH Smith 的描述,将 mysql 数据移动到 /home 分区。
- 按照@John WH Smith 的描述更改 datadir 变量并运行 mysql 服务器。
- 通过 PMA、mysql 或其他客户端以 root 用户身份连接到 mysql 服务器。
- 使用 RESET MASTER 或 PURGE BINARY LOGS TO 命令清除二进制日志(有关详细信息,请参阅 mysql 文档)。
- 停止 mysql 服务器。编辑 mysql 配置文件。记住“log_bin”变量的值。它包含二进制日志文件的路径和名称。
- 将所有binlog文件(包括binlog索引)移动到/home/mysql/目录。
- 将'log_bin'变量值更改为'log_bin = /home/mysql/mysql-bin.log',然后启动mysql数据库。