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

我在一台服务器上重新安装了RHEL 5.我能够安装Apache和PHP就好了,但是我在安装MySQL时遇到了严重的麻烦。 我尝试了以下内容:

yum install mysql-server mysql 

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

 chkconfig --levels 235 mysqld on service mysqld start 

Timeout error occurred trying to start MySQL Daemon.

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

 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist 

我不确定该从哪里出发。

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

  1. 使用yum remove mysql*卸载mysql yum remove mysql*

  2. recursion删除/usr/bin/mysql/var/lib/mysql

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

  4. 使用ps -e来检查进程,确保mysql不在运行。

  5. 重新引导服务器

  6. 运行yum install mysql-server 。 这也似乎安装MySQL客户端作为依赖。

  7. 给予mysql拥有权和组织权:

    chown -R mysql /var/lib/mysql

    chgrp -R mysql /var/lib/mysql

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

根据@Bad程序员的回答,在chown和chgrp'ing /var/lib/mysql 之后 ,可能还需要执行以下命令:

 sudo mysql_install_db –-user=mysql –ldata=/var/lib/mysql 

然后重新启动你的mysqld

我在arch linux上也有这个问题。 问题是pacman在不同于MySQL期望的位置安装了该软件包。 我能够解决这个问题:

 sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/var/lib/mysql/ 

希望这可以帮助别人!

 mysql_install_db –-user=mysql –ldata=/var/lib/mysql 

在Centos 7中为我工作

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

我想我的MySQL在/数据。

validationmy.cnf之后:

 datadir=/data/mysql 

(并将套接字放在/ var / lib / mysql)我执行命令closuresselinux for mysqld(另一种方法是将其完全closures):

 setsebool -P mysqld_disable_trans=1 

我运行了以下命令:

 > chown -R mysql . > chgrp -R mysql . > mysql_install_db --user=mysql 

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

在windows上启动之前初始化mysql。

 mysqld --initialize 

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

你必须首先运行命令:mysqld –initialize

确保你的数据文件夹在这个命令之前是空的。

如果你移动你的datadir,你不仅需要赋予新的datadir权限,而且还需要确保所有的父目录都有权限。

我将我的datadir移动到一个硬盘上,安装在Ubuntu上:

 /media/*user*/Data/ 

我的数据库数据库

我必须将权限设置为771到每个媒体, 用户和数据目录:

 sudo chmod 771 *DIR* 

如果这不起作用,另一种可以让mysql工作的方式是将/etc/mysql/my.cnf中的用户更改为root用户; 尽pipe从安全的angular度来看,这是毫无疑问的。

我刚刚在OSX上遇到了与mysql 5.7相同的问题:

 rm -rf {datadir} mysqld --initialize --datadir {datadir} mysqld --datadir {datadir} 

对于我自己,我必须这样做:

 yum remove mysql* rm -rf /var/lib/mysql/ cp /etc/my.cnf ~/my.cnf.bkup yum install -y mysql-server mysql-client mysql_install_db chown -R mysql:mysql /var/lib/mysql chown -R mysql:mysql /var/log/mysql service mysql start 

然后,我能够回到我的数据库,并configuration他们之后,我第一次去解决他们。

只要这个命令就足以在centos上做魔术了

mysql_install_db的

在我的情况下,MySQL数据文件夹的path有一个特殊的字符“ç”,它使我得到…

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

我已经删除了所有的特殊字符,一切正常。

在CentOS EL 6上,也许在早期版本中,有一种方法可以解决这个问题。

安装CentOS EL6最小的安装。 例如,我用kickstart来安装以下内容:

 %packages @core acpid bison cmake dhcp-common flex gcc gcc-c++ git libaio-devel make man ncurses-devel perl ntp ntpdate pciutils tar tcpdump wget %end 

你会发现上面列表的一个依赖是mysql-libs 。 我发现我的系统在/etc有一个默认的my.cnf ,它包含:

 [mysqld] dataddir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 

Generic Linux (Architecture Independent), Compressed TAR ArchiveGeneric Linux (Architecture Independent), Compressed TAR Archive构build时Generic Linux (Architecture Independent), Compressed TAR Archive默认数据目录是/usr/local/mysql/data ,它与已经存在的/etc/my.cnf冲突,其中定义了datadir=/var/lib/mysql 。 另外,在同一个文件中定义的pid-file文件没有mysql用户/组在/var/run/mysqld写入的权限。

一个快速的补救措施是mv /etc/my.cnf /etc/my.cnf.old这应该让你的通用源程序工作。

当然,使用源代码RPM的体验是不同的。

我试图启动服务器,并按照“检查”的解决scheme相同的问题。 但是还是有问题的。 问题是我的/etc/my.cnf文件没有指向我指定的datadir,当我执行mysql_install_db时定义了–datadir。 一旦我更新了这个,服务器启动正确。

如果你有一台曾经很开心运行MySQL的服务器,但是现在出现这个错误,那么卸载和重新安装MySQL就太过分了。

在我的情况下,服务器死了,并采取了几个磁盘块。 这影响了一些文件,包括/var/lib/mysql/mysql/host.frm和/var/lib/mysql/mysql/proc.frm

幸运的是,我可以从另一台服务器上复制这些文件,这让我越过了那个表格错误。

我在Docker for Mac上默认的overlayfs(overlay2)上遇到类似的错误。 在使用mysql创build映像后,在映像上启动mysql时发生错误。

 2017-11-15T06:44:22.141481Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table storage engine for 'user' doesn't have this option 

切换到“aufs”解决了这个问题。 (在Docker for Mac上,可以通过select“首选项…”菜单,select“守护程序”选项卡并select“高级”选项卡来编辑“daemon.json”。

/etc/docker/daemon.json:

 { "storage-driver" : "aufs", "debug" : true, "experimental" : true } 

参考:

https://github.com/moby/moby/issues/35503

https://qiita.com/Hige-Moja/items/7b1208f16997e2aa9028

我在Ubuntu 14.04.2 LTS上的情况与my.cnf中的情况类似,但对我来说,原因是之前安装剩下的〜/ .my.cnf。 删除该文件并清除/重新安装MySQL服务器后,它工作正常。