更新后 MariaDB 无法启动:[警告] 无法创建测试文件 /home/mysql/beta.lower-test
MariaDB cannot start after update: [Warning] Can't create test file /home/mysql/beta.lower-test
我刚刚使用 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
我不知道下一步该做什么。有什么指点吗?
@RedGiant 是的,我解决了。忘了post这里。
显然在 .1 版本发布后,您不能再从 /home 运行 SQL。可能有解决此问题的方法,但尚未找到。
我可以从除 /home 以外的任何位置 运行 MySQL。我所做的是卸载 /home(我将我的 SSD RAID 安装到 /home)并将我的磁盘重新安装为 /ssd。更改了我在配置中的路径,它立即起作用。
我没有运行 SELinux 或 Apparmor。
解决方法是将主目录挂载为 /var/lib/mysql:
mount --bind /home/mysql/var/lib/mysql /var/lib/mysql
从 /home 到 运行 MariaDB SQL,在文件 /usr/lib/systemd/system/mariadb.service
或 /lib/systemd/system/mariadb.service
中,只需更改:
ProtectHome=true
至:
ProtectHome=false
更新 Debian 8 (Jessie) 和 9 (Stretch) 后情况相同。在 "apt-get upgrade" 命令后
- 服务mysql开始
服务器无法启动并记录错误:
[警告] 无法创建测试文件 /home/johndoe/UserDatabases/mypcname.lower-test
解决方案是在文件 /lib/systemd/system/mariadb.service 中更改值:
ProtectHome=true
到
ProtectHome=false
如上所述。
在 debian 9 上,您需要在 /lib/systemd/system/mariadb.service
和 /lib/systemd/system/mariadb@.service
中将 ProtectHome 更改为 false,然后 运行 sudo systemctl daemon-reload。
也许 运行 sudo grep -Ri "protecthome" /lib/systemd/system
在 mysql 相关文件中查找 ProtectHome 的其他实例,如果这仍然无效的话
Thomas 的回答是正确的,但每隔几个月更新一次。所以这是一个永久的解决方案:
使用systemctl edit mariadb
创建一个文件覆盖mariadb服务的默认设置。 (在 debian 中它位于 /etc/systemd/system/mariadb.service.d/override.conf
)
设置 Thomas 在文件中更改的相同设置:
[Service]
ProtectHome=false
使用 systemctl daemon-reload
重新加载 systemctl 配置。
我遇到了问题中提到的相同问题。就我而言,我想将 MariaDB 数据目录移动到 /home/mysql 文件夹,但是在更改 my.cnf 文件之后, MariaDB 服务未能启动。
我在文件 /lib/systemd/system/mariadb.service
中进行了以下更改
ProtectHome=true to ProtectHome=false
它要求我在再次启动 Mariadb 服务时重新加载守护进程。但是,我已经重新启动了服务器并启动了 MariaDB 服务,没有任何问题。
我刚刚使用 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
我不知道下一步该做什么。有什么指点吗?
@RedGiant 是的,我解决了。忘了post这里。
显然在 .1 版本发布后,您不能再从 /home 运行 SQL。可能有解决此问题的方法,但尚未找到。
我可以从除 /home 以外的任何位置 运行 MySQL。我所做的是卸载 /home(我将我的 SSD RAID 安装到 /home)并将我的磁盘重新安装为 /ssd。更改了我在配置中的路径,它立即起作用。
我没有运行 SELinux 或 Apparmor。
解决方法是将主目录挂载为 /var/lib/mysql:
mount --bind /home/mysql/var/lib/mysql /var/lib/mysql
从 /home 到 运行 MariaDB SQL,在文件 /usr/lib/systemd/system/mariadb.service
或 /lib/systemd/system/mariadb.service
中,只需更改:
ProtectHome=true
至:
ProtectHome=false
更新 Debian 8 (Jessie) 和 9 (Stretch) 后情况相同。在 "apt-get upgrade" 命令后
- 服务mysql开始
服务器无法启动并记录错误:
[警告] 无法创建测试文件 /home/johndoe/UserDatabases/mypcname.lower-test
解决方案是在文件 /lib/systemd/system/mariadb.service 中更改值:
ProtectHome=true
到
ProtectHome=false
如上所述。
在 debian 9 上,您需要在 /lib/systemd/system/mariadb.service
和 /lib/systemd/system/mariadb@.service
中将 ProtectHome 更改为 false,然后 运行 sudo systemctl daemon-reload。
也许 运行 sudo grep -Ri "protecthome" /lib/systemd/system
在 mysql 相关文件中查找 ProtectHome 的其他实例,如果这仍然无效的话
Thomas 的回答是正确的,但每隔几个月更新一次。所以这是一个永久的解决方案:
使用systemctl edit mariadb
创建一个文件覆盖mariadb服务的默认设置。 (在 debian 中它位于 /etc/systemd/system/mariadb.service.d/override.conf
)
设置 Thomas 在文件中更改的相同设置:
[Service]
ProtectHome=false
使用 systemctl daemon-reload
重新加载 systemctl 配置。
我遇到了问题中提到的相同问题。就我而言,我想将 MariaDB 数据目录移动到 /home/mysql 文件夹,但是在更改 my.cnf 文件之后, MariaDB 服务未能启动。
我在文件 /lib/systemd/system/mariadb.service
中进行了以下更改ProtectHome=true to ProtectHome=false
它要求我在再次启动 Mariadb 服务时重新加载守护进程。但是,我已经重新启动了服务器并启动了 MariaDB 服务,没有任何问题。