Ubuntu系统修改MariaDB默认数据目录后无法创建测试文件启动失败
Ubuntu系统修改MariaDB默认数据目录启动失败解决方案
故障背景
操作过程如下:
- 在
/media/utente/E_linux路径下新建了名为mysql的目录,执行如下命令配置目录所有者:
chown -R mysql:mysql /media/utente/E_linux/mysql
- 复制原有数据到新目录:
cp -R -p /var/lib/mysql/* /media/utente/E_linux/mysql
- 修改MariaDB配置文件中的
datadir配置项 - 启动服务报错:
Job for mariadb.service failed because the control process exited with an error code. See "systemctl status mariadb.service"和"journalctl -xe" for details - 尝试修改
mariadb.service配置文件将ProtectHome参数设为false后问题仍未解决
解决步骤
该场景下故障的核心原因几乎都是Ubuntu默认的AppArmor安全模块限制了MariaDB访问非默认路径的目录,你修改的ProtectHome参数仅限制/home、/root、/run/user路径的访问,对你的/media路径下的新目录不生效,所以修改后无效果。
1. 配置AppArmor访问规则
编辑AppArmor的MariaDB配置文件:
nano /etc/apparmor.d/usr.sbin.mysqld
找到原有默认数据目录的两条权限规则:
/var/lib/mysql/ r, /var/lib/mysql/** rwk,
在这两行下方新增新数据目录的权限规则:
/media/utente/E_linux/mysql/ r, /media/utente/E_linux/mysql/** rwk,
保存退出后重新加载AppArmor配置:
systemctl reload apparmor
2. 验证上层目录访问权限
确保新数据目录的上层目录允许mysql用户进入,执行以下命令配置执行权限:
chmod +x /media/utente /media/utente/E_linux
3. 确认配置无冲突
检查MariaDB配置文件中除datadir外无其他路径配置指向旧的/var/lib/mysql目录,若有socket、log_error等配置指向旧目录需同步修改,也可以临时将旧的/var/lib/mysql目录重命名避免冲突:
mv /var/lib/mysql /var/lib/mysql.bak
4. 重启服务验证
systemctl restart mariadb
如果仍启动失败,执行journalctl -u mariadb查看完整运行日志即可定位具体问题。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

