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

时间:2012-01-31 16:45:47

标签: mysql linux rhel rhel5

我在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。

16 个答案:

答案 0 :(得分:62)

  1. 使用yum remove mysql*

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

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

  5. 使用ps -e检查进程以确保mysql仍在运行。

  6. 使用reboot

  7. 重新启动服务器
  8. 运行yum install mysql-server。这似乎也将mysql客户端安装为依赖。

  9. 使用以下命令提供mysql所有权和组priveleges:

    chown -R mysql /var/lib/mysql

    chgrp -R mysql /var/lib/mysql

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

答案 1 :(得分:58)

@Bad Programmer的答案后chownchgrp'/var/lib/mysql之后,您可能还必须执行以下命令:

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

然后重新启动mysqld

答案 2 :(得分:38)

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

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

希望这有助于某人!

答案 3 :(得分:11)

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

在Centos 7中为我工作

答案 4 :(得分:7)

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

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

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

答案 5 :(得分:3)

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

我将我的datadir移动到硬盘驱动器上,安装在Ubuntu中:

/media/*user*/Data/

我的datadir是数据库

我必须为每个媒体 user 和数据目录设置771的权限:

sudo chmod 771 *DIR*

如果这不起作用,另一种让mysql工作的方法是将/etc/mysql/my.cnf中的用户改为root;虽然毫无疑问从安全角度来看这样做会有一些问题。

答案 6 :(得分:3)

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

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

答案 7 :(得分:2)

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

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

然后我能够重新进入我的数据库,并在我第一次使用它们之后再次配置它们。

答案 8 :(得分:2)

这个命令就足以在centos 6.6上做神奇了。

mysql_install_db的

答案 9 :(得分:0)

在我的情况下,MySQL数据文件夹的路径有一个特殊字符“ç”,它让我得到...

  

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

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

答案 10 :(得分:0)

在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。我发现我的系统在my.cnf中有一个默认/etc,其中包含:

[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 Archive构建时,您的默认数据目录/usr/local/mysql/data与已定义/etc/my.cnf的{​​{1}}冲突,后者定义datadir=/var/lib/mysql。此外,同一文件中定义的pid-file没有权限让mysql用户/组在/var/run/mysqld中写入它。

快速解决方法是mv /etc/my.cnf /etc/my.cnf.old,这将使您的通用源程序正常工作。

当然,您使用源RPM的经验是不同的。

答案 11 :(得分:0)

我在尝试启动服务器时遇到了同样的问题,然后按照"检查了"解。 但仍然有问题。问题是我的/etc/my.cnf文件没有指向我的 我在定义了--datadir的情况下执行mysql_install_db时定义的指定datadir。更新后,服务器正确启动。

答案 12 :(得分:0)

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

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

幸运的是,我可以从其他服务器上复制这些内容,这让我超过了表格错误。

答案 13 :(得分:0)

我在overlayf(overlay2)上遇到了类似的错误,这是Docker for Mac上的默认错误。 在使用mysql创建映像后,在映像上启动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上," 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

答案 14 :(得分:0)

在Windows中,以管理员身份在命令提示符下运行以下命令

Step 1:
mysql_install_db.exe

Step 2:
mysqld --initialize

Step 3:
mysqld --console

Step 4:
In windows

Step 4:
mysqladmin -u root password "XXXXXXX"

Step 5:
mysql -u root -p

Mariadb database information

答案 15 :(得分:-3)

我在Ubuntu 14.04.2上的案例LTS与my.cnf上的其他人类似,但对我而言,原因是〜/ .my.cnf是以前安装的剩余部分。删除该文件并清除/重新安装mysql-server后,它运行正常。