无法启动MySQL

我从shell使用这个命令来修复所有的数据库

mysqlcheck -u root -p --auto-repair --check --optimize --all-databases 

之后我重新启动了服务器

当它再次活着回来我试图打开我的vBulletin论坛,但我收到数据库错误消息。

也试图打开phpMyAdmin,但我收到这个错误:

 #2002 - The server is not responding (or the local MySQL server's socket is not correctly configured). 

我检查了服务列表,发现MySQL服务没有列出,所以我试图从shell启动它,我收到此错误:

 Starting MySQL.Manager of pid-file quit without updating fi[FAILED] 

任何人都可以帮助我呢?

提前致谢。


更新

我在日志文件中find这些行

 101101 01:36:01 mysqld started 101101 1:36:01 [Warning] Asked for 196608 thread stack, but got 126976 101101 1:36:01 [ERROR] /usr/sbin/mysqld: Table './mysql/user' is marked as crashed and last (automatic?) repair failed 101101 1:36:01 [ERROR] /usr/sbin/mysqld: Table './mysql/user' is marked as crashed and last (automatic?) repair failed 101101 1:36:01 [ERROR] Fatal error: Can't open and lock privilege tables: Table './mysql/user' is marked as crashed and last (automatic?) repair failed 101101 01:36:01 mysqld ended 

那我该怎么办?

当mysqld未正确closures时会发生这种情况。 基本上,pid文件(包含当前正在运行的进程的进程ID的文件)存在以检测进程是否正在运行。 当系统不稳定时 – 即find了pid,但找不到进程,意味着服务器未正确停止 – 这需要人工干预。

只需rm /var/run/mysqld.pid ,你应该没问题。

安德鲁

更新:根据您最近的日志文件(以及自动修复失败的事实),这里有一个额外的修复方法伟大的职位 。 另外,请确保服务器上有足够的磁盘空间。

尝试使用–skip-grant-tables启动mysqld,以免尝试加载(崩溃)用户表。

 /etc/init.d/mysqld start --skip-grant-tables 

然后login到MySQL

 mysql 

然后尝试用户表上的修复命令

 use mysql; REPAIR TABLE user; 

我不确定这个语法是否100%正确。

我认为你需要mysqlrepair:

 mysqlrepair -r tablename 

(刚刚意识到这和mysqlcheck是一样的)

你需要的是明确的修复而不是自动修复。

问题解决了 :)

感谢cstamas,Resorath,安德鲁&根纳季,感谢所有的帮助:)

我尝试了这个从壳,它工作得很好:

 service mysql stop mkdir /home/tmp cd /var/lib/mysql myisamchk --tmpdir=/home/tmp -r */*.MYI service mysql start