73

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

4

18 回答 18

83

在@Bad Programmer的回答之后chown,您可能还必须执行以下命令:chgrp/var/lib/mysql

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

然后重新启动你的mysqld.

于 2014-03-04T18:14:52.547 回答
67
  1. 使用卸载 mysqlyum 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 所有权和组权限:

    chown -R mysql /var/lib/mysql

    chgrp -R mysql /var/lib/mysql

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

于 2012-02-01T16:37:19.807 回答
52

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

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

希望这对某人有帮助!

于 2016-04-22T20:02:32.550 回答
12

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

我想要我的 mysql 在 /data 中。

验证 my.cnf 后:

datadir=/data/mysql

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

setsebool -P mysqld_disable_trans=1

我运行了以下命令:

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

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

于 2012-12-19T00:55:28.780 回答
11
mysql_install_db –-user=mysql --ldata=/var/lib/mysql

在 Centos 7 中为我工作

于 2014-11-24T09:14:59.957 回答
10

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

mysqld --initialize
于 2015-12-21T09:27:07.177 回答
7

下载mysql zip版本时,如果直接运行mysqld,会报这个错误:2016-02-18T07:23:48.318481Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user'不存在 2016-02-18T07:23:48.319482Z 0 [错误] 中止

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

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

于 2016-02-18T07:32:05.923 回答
4

我刚刚在 OSX 上使用 mysql 5.7 遇到了同样的问题:

rm -rf {datadir}
mysqld --initialize --datadir {datadir}
mysqld --datadir {datadir}
于 2016-06-07T00:12:33.027 回答
3

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

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

/media/*user*/Data/

我的 datadir 是Databases

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

sudo chmod 771 *DIR*

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

于 2014-10-09T12:36:49.550 回答
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

然后我能够回到我的数据库并在我第一次攻击它们之后再次配置它们。

于 2013-09-06T14:54:57.987 回答
2

仅此命令就足以在 centos 6.6 上施展魔法

mysql_install_db

于 2016-02-20T06:36:25.367 回答
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定义的已经存在的datadir=/var/lib/mysql. 此外,pid-file在同一文件中定义的 mysql 用户/组没有权限在/var/run/mysqld.

一个快速的补救措施是mv /etc/my.cnf /etc/my.cnf.old让您的通用源程序正常工作。

当然,使用源 RPM 的体验会有所不同。

于 2013-12-09T23:00:00.293 回答
0

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

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

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

于 2013-06-26T18:36:54.390 回答
0

我在尝试启动服务器并遵循“已检查”解决方案时遇到了同样的问题。但还是有问题。问题是我的 /etc/my.cnf 文件没有指向我在定义 --datadir 的情况下执行 mysql_install_db 时定义的指定数据目录。一旦我更新了这个,服务器就正确启动了。

于 2014-04-21T00:22:30.293 回答
0

我在 Docker for Mac 上的默认设置 overlayfs (overlay2) 上遇到了类似的错误。在使用 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 上,可以通过选择“Preferences...”菜单,选择“Daemon”选项卡,然后选择“Advanced”选项卡来编辑“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

于 2017-11-15T07:24:36.817 回答
0

如果您的服务器曾经可以愉快地运行 MySQL,但现在出现此错误,那么卸载并重新安装 MySQL 是多余的。

就我而言,服务器死机并占用了几个磁盘块。这影响了一些文件,包括 /var/lib/mysql/mysql/host.frm 和 /var/lib/mysql/mysql/proc.frm

幸运的是,我可以从另一台服务器复制这些,这让我克服了那个表错误。

于 2016-12-07T12:30:30.280 回答
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数据库信息

于 2020-08-29T01:11:50.873 回答
-3

我在 Ubuntu 14.04.2 LTS 上的情况与其他使用 my.cnf 的情况相似,但对我来说,原因是之前安装遗留下来的 ~/.my.cnf。删除该文件并清除/重新安装 mysql-server 后,它工作正常。

于 2015-07-05T04:10:48.140 回答