一夜之间,我们的 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)
如果我可以登录到服务器,我可以删除一个大表作为临时修复,但我不能。如何登录?
您不需要删除大表。为什么 ???
这就是mysql的奇怪之处。mysqld 使用 MyISAM 临时表进行内部操作。当 mysqld 空间不足时,它不会崩溃。它冻结了!
以下是我对 2 年前的帖子“Site Offline”MySQL 服务器无法启动和停止的回答
第 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 天的二进制日志。
| 归档时间: |
|
| 查看次数: |
15174 次 |
| 最近记录: |