【问题标题】:service mysql start leaves "privilege tables: Table 'mysql.user' doesn't exist" in my log file and the server failsservice mysql start 在我的日志文件中留下“特权表:表 'mysql.user' 不存在”并且服务器失败
【发布时间】:2017-08-21 13:22:15
【问题描述】:

我已经阅读了许多其他有类似问题的帖子,但似乎没有一个与我遇到的问题相同,所以我希望有人能提供帮助。

我看到的所有其他帖子,在某种程度上都说要从新安装重新开始,或者至少破坏并重建所有用户和其他参考资料所在的主 mysql 数据库。我不想这样做,因为我当前的数据库中有太多数据而且它仍然可以工作(有点)。

我在 apparmor 阻止从 mysql 构建文件时遇到了很多麻烦,所以我很生气并删除了 apparmor。那是这一切开始的时候。

以正常方式启动 MySQL 会在日志文件的主题行中显示错误,并且服务器永远不会停止。这是我平时使用的命令

service mysql start

另一方面,如果我以这种方式启动 mysql,它就可以工作!!!

mysqld --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data

所以,现在我知道 MySQL 本身和数据库都没有问题。一定有什么问题导致正常启动过程不知道数据库应该在哪里。

问题是,配置文件并没有以任何方式改变。它们被读取得很好,因为一旦我让数据库运行,一切正常,我的所有应用程序都上线并完美运行。

配置文件具有正确的数据路径。

/etc/mysql/mysql.conf.d/mysqld.cnf: datadir = /var/lib/mysql/data

谁能想到这里会发生什么?我确信删除 apparmor 是根本原因,但重新安装它并没有任何帮助。它现在被禁用并且服务正在运行,但前提是我以另一种方式启动它,这不是我想要做的。我想以正常/正确的方式重新开始。替代方案只是让我暂时启动并运行的权宜之计。

谢谢!

【问题讨论】:

    标签: mysql linux permissions


    【解决方案1】:

    我仍然不知道为什么会发生这种情况。我确信这与移除 apparmor 有关,但我无法证明这一点。我也不明白为什么会这样,但现在一切正常。

    在工作正常和停止工作之间,我对系统执行的唯一更改是删除了 apparmor。

    不知何故,我的 /etc/mysql/mysql.conf.d 文件夹中的配置文件停止被读取。它们被包含在文件 /etc/mysql/mysql.cnf 中。文件 /etc/mysql/my.cnf 仅包含文件夹 /etc/mysql/conf.d 中的文件,这些文件仍在包含中。

    作为 root (sudo su),我一直在尝试找出事情停止的原因,其中一个非常有用的命令是...

    mysqld --user=mysql --verbose --help
    

    这显示了 mysqld 试图用来启动服务的所有值。我立即看到 datadir 值不是我的配置文件中的值。这就是为什么当我手动运行命令并指定数据目录时它起作用但当我尝试正常启动服务时失败的原因。

    我不知道为什么文件 /etc/mysql/mysql.cnf 不再被读取。权限看起来不错。我什至尝试将内容复制到一个新文件中,但什么也没有。帮助命令说它只是按这个顺序从这些文件中读取......

    /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
    

    所以,因为我厌倦了它,我将包含行从 mysql.cnf 文件复制到 my.cfn 文件。我真的不在乎文件夹是从哪里包含的,只要它可以工作。

    现在服务可以正常启动了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多