由于磁盘已满,mysqld 不再启动

由于磁盘已满,mysqld 不再启动

如何清理日志或找到最大的文件并减少空间?我也不明白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 服务器能够启动。因此,程序应该如下:

  1. 按照@John WH Smith 的描述,将 mysql 数据移动到 /home 分区。
  2. 按照@John WH Smith 的描述更改 datadir 变量并运行 mysql 服务器。
  3. 通过 PMA、mysql 或其他客户端以 root 用户身份连接到 mysql 服务器。
  4. 使用 RESET MASTER 或 PURGE BINARY LOGS TO 命令清除二进制日志(有关详细信息,请参阅 mysql 文档)。
  5. 停止 mysql 服务器。编辑 mysql 配置文件。记住“log_bin”变量的值。它包含二进制日志文件的路径和名称。
  6. 将所有binlog文件(包括binlog索引)移动到/home/mysql/目录。
  7. 将'log_bin'变量值更改为'log_bin = /home/mysql/mysql-bin.log',然后启动mysql数据库。

相关内容