MariaDB 更新后无法启动:[警告]无法创建测试文件 /home/mysql/beta.lower-test

问题描述 投票:0回答:7

我刚刚使用 apt-get dist-upgrade 更新了 MariaDB。现在它不会再使用 service mysql start 开始了。

但是,我可以以 root 身份运行它或执行以下操作: sudo -u mysql mysqld_safe 然后 MariaDB 启动正常。文件夹 /home/mysql 属于 mysql 用户和组。

我发现这个函数抛出错误: https://github.com/MariaDB/server/blob/7ff44b1a832b005264994cbdfc52f93f69b92cdc/sql/mysqld.cc#L9865

我不知道下一步该做什么。有什么指点吗?

mysql ubuntu mariadb ubuntu-server
7个回答
67
投票

要从 /home 运行 MariaDB SQL,请在文件

/usr/lib/systemd/system/mariadb.service
/lib/systemd/system/mariadb.service
中,只需更改:

ProtectHome=true

至:

ProtectHome=false

20
投票

托马斯的答案是正确的,但每隔几个月就会更新一次。所以这是一个永久的解决方案:

使用

systemctl edit mariadb
创建一个文件来覆盖 mariadb 服务的默认设置。 (在 debian 中它位于
/etc/systemd/system/mariadb.service.d/override.conf

设置 Thomas 在文件中更改的相同设置:

[Service]
ProtectHome=false

使用

systemctl daemon-reload
重新加载 systemctl 配置。


8
投票

在 debian 9 上,您需要在

/lib/systemd/system/mariadb.service
/lib/systemd/system/[email protected]
中将 ProtectHome 更改为 false,然后运行 sudo systemctl daemon-reload。

如果仍然不起作用,也许还可以运行

sudo grep -Ri "protecthome" /lib/systemd/system
在 mysql 相关文件中查找 ProtectHome 的其他实例


7
投票

此问题的解决方法是将目录挂载为 /var/lib/mysql:

mount --bind /home/mysql/var/lib/mysql /var/lib/mysql

4
投票

Debian 8 (Jessie) 和 9 (Stretch) 更新后情况相同。在“apt-get update”命令之后

  • mysql服务启动

服务器无法启动并记录错误:

[警告] 无法创建测试文件 /home/johndoe/UserDatabases/mypcname.lower-test

解决方案是更改文件/lib/systemd/system/mariadb.service中的值:

ProtectHome=true

ProtectHome=false

如上所述。


3
投票

@RedGiant 是的,我解决了。忘记在这里发帖了。

显然在 .1 版本之后,您无法再从 /home 运行 SQL。可能有办法解决这个问题,但还没有找到。

我可以从除 /home 之外的任何位置运行 MySQL。我所做的就是卸载 /home(我将 SSD RAID 安装到 /home)并将磁盘重新安装为 /ssd。更改了配置中的路径,它立即生效了。

我没有运行 SELinux 或 Apparmor。


0
投票

我遇到了与问题中提到的相同的问题。就我而言,我想将 MariaDB 数据目录移动到 /home/mysql 文件夹,但更改 my.cnf 文件后,MariaDB 服务无法启动。

我在文件/lib/systemd/system/mariadb.service

中进行了以下更改
ProtectHome=true to ProtectHome=false

它要求我在再次启动 Mariadb 服务时重新加载守护进程。但是,我已经重新启动服务器并启动 MariaDB 服务,没有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.