Mysql将不再启动

时间:2017-06-15 17:45:00

标签: mysql ubuntu

我想再次查看我的logserver,但突然间我在访问网址时收到此消息:

我正在使用ubuntu xenial

致命:无法连接到'localhost'上的MySQL服务器。请确保在'include / config.php'

中指定了有效的MySQL数据库名称

当我做journalctl -xe时,我收到以下消息:

-- Unit mysql.service has begun starting up.
Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=112

Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=0

Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=112
Jun 15 19:26:12 arjanlog kernel: audit: type=1400 audit(1497547572.504:69): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" 
name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_m

Jun 15 19:26:12 arjanlog kernel: audit: type=1400 audit(1497547572.504:70): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=3665 comm="mysqld" requested_mask="r"

Jun 15 19:26:12 arjanlog kernel: audit: type=1400 audit(1497547572.504:71): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_m

Jun 15 19:26:12 arjanlog systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE

7 个答案:

答案 0 :(得分:8)

我也遇到了这个问题,并通过修复/etc/apparmor.d/usr.sbin.mysqld处的apparmor配置文件解决了这个问题。我添加了这些内容:

  /proc/*/status r,
  /sys/devices/system/node/ r,
  /sys/devices/system/node/node0/meminfo r,

您的journalctl -xe输出显示MySQL需要使用的文件。您还可以查看/var/log/syslog

Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=112
Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=0
Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=112

这意味着/usr/sbin/mysqld DENIED试图打开/proc/3665/status/sys/devices/system/node/进行阅读(r)。

请注意,在apparmor配置文件中,/sys/devices/system/node/中的尾部斜杠是必需的,所以不要将其关闭!

答案 1 :(得分:2)

可能没有必要完全停止apparmor。如果你不想追查核心问题,那么为mysqld禁用apparmor应该是足够的蛮力:

ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld

答案 2 :(得分:1)

对我来说,错误是mysql数据库已损坏。我可以看到当我去登录/var/log/mysql/error.log并显示错误时:

InnoDB: Database was not shutdown normally!

有一些人可以使用的解决方案,如table corruption issue

但它对我不起作用,因为我无法以WRITE模式启动服务器以解决问题。

我设法通过创建目录/var/lib/mysql的副本来解决问题 - 我复制到mysql.old然后删除了mysql目录。

然后我在终端中调用了一个命令:

sudo mysqld --initialize --initialize-insecure

生成新的mysql目录

然后我通过将mysql目录的用户和组更改为用户:mysql和组:mysql来更改新目录的权限。使用chown命令:

sudo chown -R mysql:mysql /var/lib/mysql

然后我打电话给命令:

sudo mysql -u root

并更改密码:

SET PASSWORD FOR root@'localhost' = PASSWORD('newpassword');

然后重启mysql服务器:

sudo service mysql restart

一切正常。

我一直使用的一些命令是(虽然不确定他们为修复问题做出了多少贡献):

sudo apt-get --reinstall install mysql-server-5.7

答案 3 :(得分:1)

我在另一个SO线程评论中读到apparmor="DENIED"消息可能不是MySQL(或我的MariaDB)没有启动的原因,因为它只是一个警告。

在我的情况下,更新和升级apt-installed软件包并重新启动系统解决了这个问题。

sudo apt-get dist-upgrade
sudo apt-get update
sudo apt-get upgrade
sudo reboot

然后,您需要在系统重新启动时等待几分钟,然后使用servicesystemctl重新登录并重新启动服务,我想可能/etc/system.d

然后,MariaDB开心地走开了。

各种apt upgrade命令here上有一篇很好的帖子,我认为update所做的就是更新源列表。

/var/log/mysql中没有日志文件时,我发现此命令也很有用:

tail -f /var/log/syslog | grep mysql

答案 4 :(得分:0)

当我尝试将mysql文件从/ var / lib / mysql移动到其他地方时,我遇到了这个错误。

将配置添加到/etc/apparmor.d/usr.sbin.mysqld对我不起作用

然后我得到了这个bug for ubuntu

它说:

sudo nano /etc/apparmor.d/usr.sbin.mysqld
line 25 after:
# Allow config access
  /etc/mysql/** r,
-add line:
  /etc/mysql/* r,

它对我有用:

/etc/mysql/* r,添加到/etc/apparmor.d/usr.sbin.mysqld

运行systemctl restart apparmor.service

service mysql start

答案 5 :(得分:0)

按照https://stackoverflow.com/a/45986591中的说明进行操作后,我仍然无法使MySql服务器运行。我通过tail -30 /var/log/mysql/error.log检查了它的日志。这行引起了我的注意2019-05-21T04:46:03.462807Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool。通过阅读前面的代码行,我得知它正在尝试分配128MB内存。然后我检查了内存状态,它只有111 Mb的空闲空间。我停止了几个程序(节点服务器),然后重新启动了MySql,它开始工作。然后,我评论了我输入的所有AppArmor条目,然后重新启动了AppArmor和MySql。 MySql启动没有任何错误。所以我可以得出结论,MySql没有足够的内存来开始使用。

答案 6 :(得分:-2)

解决方法:sudo service apparmor teardown