MariaDB 更新后无法启动:[警告] 无法创建测试文件 /home/mysql/beta.lower-test
Posted
技术标签:
【中文标题】MariaDB 更新后无法启动:[警告] 无法创建测试文件 /home/mysql/beta.lower-test【英文标题】:MariaDB cannot start after update: [Warning] Can't create test file /home/mysql/beta.lower-test 【发布时间】:2016-11-26 12:29:13 【问题描述】:我刚刚使用 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
我不知道下一步该做什么。有什么指点吗?
【问题讨论】:
只需将您的数据库系统恢复到以前的版本...或备份您的数据库(mysqldump
),删除 MariaDB 的每一条痕迹,然后从头开始安装最新版本 :)
是的,真的不想那样做。一定是更简单的方法。
@BentodeGier,你解决问题了吗?更新后我刚刚收到此错误
检查这个答案:***.com/a/69450228/3881354 并按照所有提到的步骤,但在 Ubunto
你应该使用 AppArmor
而不是 SELinux
【参考方案1】:
要从 /home 运行 MariaDB SQL,在文件 /usr/lib/systemd/system/mariadb.service
或 /lib/systemd/system/mariadb.service
中,只需更改:
ProtectHome=true
到:
ProtectHome=false
【讨论】:
在 ubuntu 17.04 中该文件似乎已移至此处 /lib/systemd/system/ 这似乎被重置了几次。有什么办法可以防止这种情况发生吗? 对于 debian 9,该文件位于 /etc/systemd/system/multi-user.target.wants/mariadb.service。然后在启动服务之前必须运行“systemctl daemon-reload” 这显然不再起作用了。 Mariadb 今天早上刚刚更新,它完全忽略了 ProtectHome=false。【参考方案2】:Thomas 的答案是正确的,但每隔几个月就会更新一次。所以这是一个永久的解决方案:
使用systemctl edit mariadb
创建一个覆盖mariadb 服务默认设置的文件。 (在 debian 中它位于 /etc/systemd/system/mariadb.service.d/override.conf
)
在文件中设置 Thomas 更改的相同设置:
[Service]
ProtectHome=false
使用 systemctl daemon-reload
重新加载 systemctl 配置。
【讨论】:
此答案适用于 Ubuntu 18.04,并且是 Mariadb 推荐的方法。请参阅mariadb.com/kb/en/library/systemd/… 对于其他可能导致问题的内容(例如,我还缺少父目录上的执行标志),请参阅mariadb.com/kb/en/library/what-to-do-if-mariadb-doesnt-start/… 像魅力一样工作!【参考方案3】:在 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 实例
【讨论】:
也为 opensuse tumbleweed 工作,/usr/lib/systemd/... 还有 mariadb.service 和 mysql.service 是符号链接的,mariadb@.service 和 mysql@.service 同样。【参考方案4】:解决方法是把 home 目录挂载为 /var/lib/mysql:
mount --bind /home/mysql/var/lib/mysql /var/lib/mysql
【讨论】:
谢谢。我使用了上面的解决方案,但这会被 updtes 永久删除。因此我希望这是长期的解决方法:我把它放在 fstab/home/share/mysqldb /var/lib/mysql none bind 0 0
【参考方案5】:
Debian 8 (Jessie) 和 9 (Stretch) 更新后的情况相同。在“apt-get upgrade”命令之后
服务mysql启动服务器启动失败并记录错误:
[警告] 无法创建测试文件 /home/johndoe/UserDatabases/mypcname.lower-test
解决方案是更改文件 /lib/systemd/system/mariadb.service 中的值:
ProtectHome=true
到
ProtectHome=false
如上所述。
【讨论】:
【参考方案6】:@RedGiant 是的,我解决了。忘记在这里发帖了。
显然,在 .1 版本之后,您无法再从 /home 运行 SQL。可能有办法解决这个问题,但还没有找到。
我可以从除 /home 之外的任何位置运行 MySQL。我所做的是卸载 /home(我将我的 SSD RAID 安装到 /home)并将我的磁盘重新安装为 /ssd。更改了我在配置中的路径,它立即工作。
我没有运行 SELinux 或 Apparmor。
【讨论】:
是的,您可以使用/home
。这只是一个坏主意,需要额外的配置(centos/fedora)【参考方案7】:
我遇到了与问题中提到的相同的问题。就我而言,我想将 MariaDB 数据目录移动到 /home/mysql 文件夹,但在更改 my.cnf 文件后,MariaDB 服务无法启动。
我在文件/lib/systemd/system/mariadb.service
中做了如下改动ProtectHome=true to ProtectHome=false
它要求我在再次启动 Mariadb 服务时重新加载守护进程。但是,我已经重启了服务器并启动了 MariaDB 服务,没有任何问题。
【讨论】:
以上是关于MariaDB 更新后无法启动:[警告] 无法创建测试文件 /home/mysql/beta.lower-test的主要内容,如果未能解决你的问题,请参考以下文章
空字符串无法解释的MySQL错误#1064创建更新触发器后?
更新触发器后创建空字符串时出现无法解释的 MySQL 错误 #1064?
centos通过yum安装mariadb(mysql)无法启动服务或者找不到mysql.sock
Angular 10 PWA 中 Chrome 更新后的新警告“无法安装站点:页面无法脱机工作。从 Chrome 93 开始...”