如何修复带有完整硬盘驱动器的 MySQL 服务器?

gwg*_*gwg 6 mysql

一夜之间,我们的 MySQL 服务器完全填满了硬盘。现在,我无法通过 phpMyAdmin 登录

`Cannot log in to the MySQL server`
Run Code Online (Sandbox Code Playgroud)

或通过命令行

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Run Code Online (Sandbox Code Playgroud)

或通过 mysqladmin

mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Run Code Online (Sandbox Code Playgroud)

如果我可以登录到服务器,我可以删除一个大表作为临时修复,但我不能。如何登录?

Rol*_*DBA 5

您不需要删除大表。为什么 ???

这就是mysql的奇怪之处。mysqld 使用 MyISAM 临时表进行内部操作。当 mysqld 空间不足时,它不会崩溃。它冻结了!

以下是我对 2 年前的帖子“Site Offline”MySQL 服务器无法启动和停止的回答

摘抄

根据MySQL 5.0认证学习指南

在此输入图像描述 第 408,409 页第 29.2 节第 11 条指出:

如果在向 MyISAM 表添加行时磁盘空间不足,则不会发生错误。服务器暂停操作,直到空间可用,然后完成操作。

事实上,mysqld 并没有消亡。它正在等待可用磁盘空间来继续正常执行的操作。即使在启动期间,如果 mysqld 创建临时表,它也是一个 MyISAM 表。磁盘上没有剩余空间?没问题。MyISAM 只是耐心地等待您释放可用空间。

摘录结束

您所要做的就是手动删除二进制日志。然后,mysqld将开始正常运行。即使只删除 10 个日志也会释放 1G 空间,并使 mysqld 再次运行。

您需要执行以下操作:

登录mysql并运行

mysql> RESET MASTER;
mysql> SET GLOBAL expire_logs_days = 7;
Run Code Online (Sandbox Code Playgroud)

然后,将其添加到my.cnf

[mysqld]
expire-logs-days = 7
Run Code Online (Sandbox Code Playgroud)

现在,mysqld 将自动删除任何超过 7 天的二进制日志。