无法启动 MySQL

无法启动 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]

有人能帮助我吗?

提前致谢。


更新

我在日志文件中找到了这些行

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

那我该怎么办?

答案1

当 mysqld 没有正确关闭时,就会发生这种情况。基本上,pid 文件(包含当前正在运行的进程的进程 ID 的文件)的存在是为了检测进程是否正在运行。当系统失灵时(即,它找到了 pid 但找不到进程,这意味着服务器没有正确停止),它需要手动干预。

简单rm /var/run/mysqld.pid来说你应该会没事。

安德鲁

更新:根据您最近的日志文件(以及自动修复失败的事实),以下是关于其他修复方法的精彩帖子。此外,请确保服务器上有足够的磁盘空间。

答案2

尝试使用 --skip-grant-tables 启动 mysqld,这样它就不会尝试加载(崩溃的)用户表。

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

然后登录mysql

mysql

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

use mysql; 
REPAIR TABLE user;

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

答案3

我认为你需要 mysqlrepair:

mysqlrepair -r tablename

(刚刚意识到这与 mysqlcheck 相同。)

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

答案4

我在 xampp 上遇到了同样的问题,对于 xampp,首先转到C:\xampp\mysql\bin\并启动守护进程

mysqld --skip-grant-tables --datadir=C:\xampp\mysql\data\

然后在同一路径上打开另一个终端并运行mysqlcheck以查找哪些表需要修复

mysqlcheck mysql -a

之后运行mysql并修复表格

mysql
use mysql; 
REPAIR TABLE table_name;

我希望可以修复它而不会出现任何问题

相关内容