致命错误:无法打开和锁定权限表:表'mysql.host'不存在

Bad*_*mer 61 mysql linux rhel rhel5

我在RHEL 5上重新安装的服务器上.我能够安装Apache和PHP.但是我的MySQL安装遇到了严重问题.我尝试了以下方法:

yum install mysql-server mysql 
Run Code Online (Sandbox Code Playgroud)

并没有得到任何错误或冲突.然后我尝试使用以下命令启动mysql:

chkconfig --levels 235 mysqld on
service mysqld start
Run Code Online (Sandbox Code Playgroud)

得到 Timeout error occurred trying to start MySQL Daemon.

我检查了我的日志并看到了这个错误:

[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始.

作为参考,我使用RHEL 5并安装了最新版本的PHP 5和Apache.

Bad*_*mer 61

  1. 使用卸载mysql yum remove mysql*

  2. 递归删除/usr/bin/mysql/var/lib/mysql

  3. 删除文件 /etc/my.cnf.rmp

  4. 使用ps -e检查流程,以确保MySQL正在没有仍在运行.

  5. 重启服务器 reboot

  6. yum install mysql-server.这似乎也将mysql客户端安装为依赖项.

  7. 给出mysql所有权和组priveleges:

    chown -R mysql /var/lib/mysql

    chgrp -R mysql /var/lib/mysql

  8. 使用service mysqld start启动MySQL守护进程.

  • 我认为改变团队和所有权是至关重要的部分.似乎当mysql启动时它会自动创建mysql.sock文件,但如果它没有系统权限则无法执行此操作. (5认同)

bk0*_*bk0 61

经过chownchgrp"ING /var/lib/mysql每通过回答@Bad程序员,你可能还需要执行以下命令:

sudo mysql_install_db --user=mysql --ldata=/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

然后重启你的mysqld.

  • ````表示以root身份运行命令(#是传统的root用户shell提示符,而$是非特权用户). (2认同)

小智 40

我也在arch linux上遇到过这个问题.问题是pacman将软件包安装在与MySQL预期不同的位置.我能够解决这个问题:

sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/var/lib/mysql/
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人!


小智 11

mysql_install_db –-user=mysql --ldata=/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

在Centos 7为我工作

  • 如果适用,我发现这是一个比完全卸载和重新安装数据库服务器更好的解决方案,就像其他答案所暗示的那样. (2认同)

Ila*_*ane 10

我的问题的根源似乎是selinux,它在操作系统安装时自动打开(强制执行).

我希望我的mysql在/ data中.

在验证my.cnf有:

datadir=/data/mysql
Run Code Online (Sandbox Code Playgroud)

(并将套接字保留在/ var/lib/mysql)我执行了命令关闭mysqld的selinux(替代方法是将其完全关闭):

setsebool -P mysqld_disable_trans=1
Run Code Online (Sandbox Code Playgroud)

我运行了以下命令:

> chown -R mysql .
> chgrp -R mysql .
> mysql_install_db --user=mysql
Run Code Online (Sandbox Code Playgroud)

我启动了mysql守护进程,之后一切正常.


小智 10

在Windows上启动之前初始化mysql.

mysqld --initialize
Run Code Online (Sandbox Code Playgroud)

  • `[ERROR] --initialize 指定,但数据目录中有文件。中止。` (2认同)

Lev*_*vin 7

当下载mysql zip版本时,如果直接运行mysqld,你会收到此错误:2016-02-18T07:23:48.318481Z 0 [错误]致命错误:无法打开和锁定权限表:表'mysql.user'不存在2016-02-18T07:23:48.319482Z 0 [ERROR]中止

你必须先在命令下运行:mysqld --initialize

在此命令之前,请确保您的数据文件夹为空.