首页 文章

更改datadir后,MariaDB无法启动

提问于
浏览
3

背景资料:

我让CentOS 7安装程序自动分区 .

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   43G  7.9G  85% /
devtmpfs                  32G     0   32G   0% /dev
tmpfs                     32G     0   32G   0% /dev/shm
tmpfs                     32G  9.3M   32G   1% /run
tmpfs                     32G     0   32G   0% /sys/fs/cgroup
/dev/sda1                492M  123M  369M  25% /boot
/dev/mapper/centos-home  476G   54G  422G  12% /home
tmpfs                    6.3G     0  6.3G   0% /run/user/1000
tmpfs                    6.3G     0  6.3G   0% /run/user/0

但我没想到大部分磁盘空间都没有进入/ root目录,而且MariaDB现在很快就会在/ var / lib / mysql中耗尽35GB空间 .

所以我通过下面的命令更改了datadir,但后来无法启动

systemctl stop mariadb
cp -fR /var/lib/mysql /home/
chown -R mysql:mysql /home/mysql

vi /etc/my.cnf.d/server.cnf并添加以下行

[mysqld] 
datadir=/home/mysql

systemctl启动mariadb

但它失败并符合“无法创建测试文件”

Jul 06 22:32:26 ging2 systemd[1]: Starting MariaDB database server...
Jul 06 22:32:26 ging2 mysqld[9450]: 2017-07-06 22:32:26 140114825693312 [Note] options --log-slow-admin-statements, --log-queries-not-us...s not set
Jul 06 22:32:26 ging2 mysqld[9450]: 2017-07-06 22:32:26 140114825693312 [Note] /usr/sbin/mysqld (mysqld 10.2.5-MariaDB) starting as process 9450 ...
Jul 06 22:32:26 ging2 mysqld[9450]: 2017-07-06 22:32:26 140114825693312 [Warning] Can't create test file /home/mysql/ging2.lower-test
Jul 06 22:32:26 ging2 mysqld[9450]: [87B blob data]
Jul 06 22:32:26 ging2 mysqld[9450]: 2017-07-06 22:32:26 140114825693312 [ERROR] Aborting

我不知道它为什么不起作用,我认为权限和所有权与旧的datadir相同 .

我想有些人知道为什么 . 那么有人可以帮忙吗?

谢谢!!

1 回答

  • 4

    这只是让我在Debian 8 - > 9上升级 . 无论我怎么做,我无法让MariaDB在/ home下启动我的datadir .

    我能找到的所有答案都引用了更改AppArmor或SELinux,但这些都没有安装 .

    问题实际上是systemd,它在MariaDB启动文件中有一个安全指令,阻止它使用/ home!

    systemd服务文件(Debian上的 /lib/systemd/system/mariadb.service )包含以下设置: ProtectHome=true . 此设置将阻止MySQL写入/ home下的任何文件夹,因此它将在启动时抛出ErrNo 13:Permission Denied错误 .

    修复方法是将datadir移出/ home,或以其他方式关闭systemd服务文件中的此安全功能:

    我把它固定如下:

    1: sudo cp /lib/systemd/system/mariadb.service /etc/systemd/system/ #对服务文件进行本地覆盖

    2:编辑 /etc/systemd/system/mariadb.service 并将ProtectHome更改为false( ProtectHome=false ) . 保存文件

    3: sudo systemctl daemon-reload #刷新systemd服务,使其看到您的覆盖文件

    4: sudo systemctl start mysql

    ......它应该终于开始了!

    如果安装了AppArmor和SELinux,您还需要处理它们,这两种方法都会阻止更改MySQL数据目录 .

相关问题