我想再次查看我的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
答案 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
然后,您需要在系统重新启动时等待几分钟,然后使用service
,systemctl
重新登录并重新启动服务,我想可能/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)