我从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