![mariadb 无法在原始驱动器文件系统上启动](https://linux22.com/image/14300/mariadb%20%E6%97%A0%E6%B3%95%E5%9C%A8%E5%8E%9F%E5%A7%8B%E9%A9%B1%E5%8A%A8%E5%99%A8%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8A%E5%90%AF%E5%8A%A8.png)
我有一台 Debian 10 机器,其大型虚拟驱动器已格式化,没有分区。它在 df 中显示为 /dev/sdb。 mariadb 的实例作为 Debian 10 的标准位于 /var/lib/mysql 中,但由于复制,我经常用 Bin 日志填充根文件系统。我将其移至大型 /dev/sdb 文件系统以缓解此问题。
在将其移动到 /dev/sdb (/usr/www1/) 的安装点时,我创建了一个与权限完全匹配的 mysql 目录,并将文件“rsync -avzh”到这个新的 /usr/www1/mysql 目录并更改mariadb 服务器conf 文件中的datadir。当我尝试启动它时,出现以下记录错误
2021-04-07 15:26:28 0 [ERROR] mysqld: File './mysql-bin.index' not found (Errcode: 30 "Read-only file system")
2021-04-07 15:26:28 0 [ERROR] Aborting
我见过的常见解决方案是为 apparmor 添加别名,但经过仔细检查,apparmor 的 MariaDB 配置文件是空的,并且有注释表明 apparmor 不再跟踪 mariadb 的权限,因为它提供的价值非常小,但给 mariadb 用户带来了太多问题(或类似的问题)。更改没有帮助,但这表明这不是我的问题。
我反复仔细检查了权限,甚至尝试收紧和放松权限,但结果相同。
我现在担心,由于驱动器未使用传统分区进行格式化,因此 mariadb 不会在以这种方式格式化的驱动器上启动并将其视为只读。系统不会将其视为只读,如以下 lsblk 所示:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 75G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 58.5G 0 part /
├─sda3 8:3 0 16G 0 part [SWAP]
└─sda4 8:4 0 1007.5K 0 part
sdb 8:16 0 1T 0 disk /usr/www1
sr0 11:0 1 14.1M 0 rom
mariadb 是否有可能使用不同的方法来检查它将启动的文件系统,并将其误解为只读。我是否需要用分区重建此驱动器才能与 mariadb 一起使用?
编辑以添加请求的信息:
用于挂载的 /etc/fstab 条目:
/dev/sdb /usr/www1 ext3 defaults,errors=remount-ro 0 1
这个文件系统已经为我们的 apache2 工作,今年提供了可怕的页面数量,所以看起来大多数软件并不将其视为只读。它最终以这种方式格式化完全是偶然的。在安装这些服务器之前我没有使用过 Linux,并且遵循了一本肯定是针对 USB 驱动器的食谱。
apparmor 日志有正常条目,但没有 DENIED 消息。它始终以 5 条有关重定向的消息开头,这些消息必须是标准的。它在系统日志中。
答案1
我自己回答这个问题,因此将会有该解决方案变体的记录。事实证明,这个问题的解决方案与网上的所有示例非常相似,人们在将 mariadb 移动到 /home 时无法启动它,但有一点不同。
在 Debian 10 上,systemd 在目录中包含 /usr。按照设计,如果网站使用 mariadb,则无法在 /usr 之外运行网站。要更正它,请使用 sudo:
vi /etc/systemd/system/multi-user.target.wants/mariadb.service
/ProtectSystem=full
s/full/false/
ZZ
systemctl daemon-reload
systemctl start mariadb
我不确定是否需要在每次更新时重复此操作,因此在应用补丁时要保持警惕。