我的 VPS 出现硬件故障,导致过去 24 小时内无法使用。现在恢复后,MySQL 无法工作。请记住,我的 VPS 具有这些精确配置,在过去 2 个月内一直运行正常,没有出现任何错误,自硬件故障以来,我没有更改任何代码/数据库设置。
在命令行中,只需输入“sudo mysql”即可返回
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
我无法使用 PhpMyAdmin 登录,收到 2 个错误:
#2002 Cannot log in to the MySQL server
Connection for controluser as defined in your configuration failed.
我的网络应用程序(Codeigniter)返回以下错误
A Database Error Occurred
Unable to connect to your database server using the provided settings.
Filename: core/Loader.php
Line Number: 346
我在 Ubuntu 10.04 上运行典型的 LAMP 堆栈。我的硬盘上仍然有足够的可用空间(剩余超过 20 GB),因此空间不足不是问题。
/var/log/mysql.err 中没有任何内容,它是一个空文件。我在 Google 上搜索了好久,但现在似乎完全不知所措。
编辑:
跑步mysqld
给了我
mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
120630 18:41:10 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
120630 18:41:10 InnoDB: Initializing buffer pool, size = 8.0M
120630 18:41:10 InnoDB: Completed initialization of buffer pool
120630 18:41:10 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
起初,现在运行时mysqld
,我什么也没得到,只是返回到提示。
编辑 2:正在运行strace -e trace=file mysqld
返回:
120630 19:17:12 [Note] Plugin 'FEDERATED' is disabled.
open("./mysql/plugin.frm", O_RDONLY) = -1 EACCES (Permission denied)
mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
120630 19:17:12 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
open("/tmp/ibzhYSAn", O_RDWR|O_CREAT|O_EXCL, 0600) = 1
unlink("/tmp/ibzhYSAn") = 0
open("/tmp/ibRf9302", O_RDWR|O_CREAT|O_EXCL, 0600) = 1
unlink("/tmp/ibRf9302") = 0
open("/tmp/ibN6AjrI", O_RDWR|O_CREAT|O_EXCL, 0600) = 1
unlink("/tmp/ibN6AjrI") = 0
120630 19:17:12 InnoDB: Initializing buffer pool, size = 8.0M
120630 19:17:12 InnoDB: Completed initialization of buffer pool
open("/tmp/ibGh8aSn", O_RDWR|O_CREAT|O_EXCL, 0600) = 1
unlink("/tmp/ibGh8aSn") = 0
open("./ibdata1", O_RDWR|O_CREAT|O_EXCL, 0660) = -1 EEXIST (File exists)
open("./ibdata1", O_RDWR) = -1 EACCES (Permission denied)
120630 19:17:12 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
答案1
如果日志文件为空,请尝试mysqld
手动启动,实际上只需mysqld
在终端运行即可。
它应该自动获取您的配置文件(例如/etc/my.cnf
或/etc/mysql/my.cnf
)并运行它。
之后,您应该可以看到错误,以便您进行修复。如果您也将它们放入原始问题中,我们可以进一步提供帮助。问题可能出在主机上:内存不足,甚至物理磁盘空间不足,即使您尚未达到分配量。
另外,我的看法是:暴发户当出现故障时,这很糟糕。当我遇到 MySQL 问题时,尽管没有出现任何消息,但我还是收到了这些“已在运行”消息mysql[d]
- 所以暂时忽略它。
你能检查一下你的数据目录吗?听起来好像崩溃已经损坏了它,你丢失了一些文件。这很正常/var/lib/mysql
。
- 您能否检查一下权限(它们
.cnf
是否与您的文件相匹配)? - 你看
ibdata1
,它的权限怎么样?
如果您有备份,使用它们可能是个好主意。
答案2
检查 /var/log/daemon.log 中是否存在 mysqld 启动错误。您遇到的问题很可能是 MySQL 无法启动。
grep mysql /var/log/daemon.log
应该会为您提供相关错误消息的列表。请回复日志投诉。