MySQL 数据库几个月来一直没有问题。今天,当我使用 Synaptic Package Manager 检查可升级的软件包时,它提出了各种 MySQL 组件(-common、-client、-server 等)。因此,我决定升级(我忘记注意安装的版本,但认为它是 5.6.21)到 5.6.25-1-ubuntu2.0。之后当我去查询数据库时,我收到了消息:-
Error occured: Can't connect to MySQL server on '127.0.0.1' (111)
Run Code Online (Sandbox Code Playgroud)
然后我发现服务器没有运行。在日志文件中,我喜欢这条消息:-
Can't create file /var/lib/mysql/user.lower-test
Run Code Online (Sandbox Code Playgroud)
我花了一个小时左右的时间在线搜索,虽然之前已经报告过这个问题,但我没有在“更新后”问题的上下文中看到它,所以不确定我的下一步。
小智 10
这个问题似乎是权限问题或将mysql数据目录更改为其他位置然后/var/lib/mysql。
尝试使用 sudo 运行
看起来 /var/lib/mysql 归 mysql 用户所有,并且该组也设置为 mysql。
$ sudo chown -R mysql /var/lib/mysql
$ sudo chgrp -R mysql /var/lib/mysql
$ sudo chmod 755 /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
您是否检查过目录 /var/lib/mysql 确实存在并对应于您的数据目录?如果没有,那么您可能必须在 mysqld 部分下另外指定 datadir 参数
[mysqld]
datadir=/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
然后你可以选择配置 apparmor 以允许 MySQL 读取\执行\修改新的数据目录和子目录,或者你自己承担风险,你可以删除 apparmor。您可能需要以 root 身份执行以下操作:
/etc/init.d/apparmor stop
/etc/init.d/apparmor teardown
update-rc.d -f apparmor remove
apt-get purge apparmor
reboot
Run Code Online (Sandbox Code Playgroud)
小智 9
我在尝试运行 MySQL 的多个实例时遇到了这个问题,但我没有删除 apparmor,而是更新了 usr.sbin.mysqld 文件:
vim /etc/apparmor.d/usr.sbin.mysqld
Run Code Online (Sandbox Code Playgroud)
例如,这就是我的文件的样子,一旦我添加了需要写入权限的文件夹,一切都会正常工作。
/usr/sbin/mysqld {
capability dac_override,
capability sys_resource,
capability setgid,
capability setuid,
network tcp,
/etc/hosts.allow r,
/etc/hosts.deny r,
/etc/mysql/*.pem r,
/etc/mysql/conf.d/ r,
/etc/mysql/conf.d/* r,
/etc/mysql/*.cnf r,
/usr/lib/mysql/plugin/ r,
/usr/lib/mysql/plugin/*.so* mr,
/usr/sbin/mysqld mr,
/usr/share/mysql/** r,
/var/log/mysql.log rw,
/var/log/mysql.err rw,
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
/var/lib/mysql1/ r,
/var/lib/mysql1/** rwk,
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid rw,
/var/run/mysqld/mysqld.sock w,
/var/run/mysqld/mysqld1.pid rw,
/var/run/mysqld/mysqld1.sock w,
/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock w,
/sys/devices/system/cpu/ r,
}
Run Code Online (Sandbox Code Playgroud)
小智 5
当我尝试将 /var/lib/mysql 移动到另一个磁盘并用符号链接替换原始目录时,出现了这个问题。
Apparmor 将拒绝此配置中的访问,请参阅
为什么 Apparmor 开发人员认为这不是一个错误。解决方法是使用绑定安装。看
以获得解释。
所以
mount --bind /newmysqldatadir /var/lib/mysql
service mysql start
Run Code Online (Sandbox Code Playgroud)
为我解决了这个问题。
| 归档时间: |
|
| 查看次数: |
60563 次 |
| 最近记录: |