我全新安装了 Centos 7.6,其中包括 Centos 7.6 安装的标准分区方案。其中包括 50GB 的“/”目录分区。我想移动默认的 nysql(mariadb)数据目录,这样就不会用大数据库填满根分区。我想将目录移动到用户主目录中的目录。更改后 MariaDB 将无法启动,根据错误消息,我不明白原因。
我已尝试按照说明操作:
# Check the current data-dir
mysql -u root -p
MariaDB [(none)]> select @@datadir;
# Edit the my.cnf file and change:
[mysqld]
datadir=/home/development/mysql
socket=/home/development/mysql/mysql.sock
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
[client]
port=3306
socket=/home/development/mysql/mysql.sock
# Restart MariaDB
systemectl start mariadb
MariaDB启动失败,输出如下。
Dec 10 12:19:52 localhost.localdomain mariadb-prepare-db-dir[24554]: Database MariaDB is not initialized, but the directory /home/development/mysql is not empty, so initialization cannot be done.
Dec 10 12:19:52 localhost.localdomain mariadb-prepare-db-dir[24554]: Make sure the /home/development/mysql is empty before running mariadb-prepare-db-dir.
所讨论的目录实际上是空的。文件夹的权限是mysql:mysql。
另外,我已使用以下命令完全禁用 SELinux:
setenforce 0
以下是主目录的权限输出:
$ ls -haltr /home
total 4.0K
drwxr-xr-x. 3 root root 25 Dec 10 15:41 .
dr-xr-xr-x. 17 root root 242 Dec 10 15:59 ..
drwx------. 19 development development 4.0K Dec 10 18:00 development
$ ls -haltr /home/development/mysql
total 29M
drwx------. 2 mysql mysql 4.0K Dec 10 17:56 mysql
drwx------. 2 mysql mysql 4.0K Dec 10 17:56 performance_schema
-rw-rw----. 1 mysql mysql 52 Dec 10 17:56 aria_log_control
-rw-rw----. 1 mysql mysql 16K Dec 10 17:56 aria_log.00000001
-rw-rw----. 1 mysql mysql 5.0M Dec 10 17:56 ib_logfile1
srwxrwxrwx. 1 mysql mysql 0 Dec 10 17:56 mysql.sock
-rw-rw----. 1 mysql mysql 18M Dec 10 17:56 ibdata1
-rw-rw----. 1 mysql mysql 5.0M Dec 10 17:56 ib_logfile0
drwx------. 19 development development 4.0K Dec 10 18:00 ..
drwxrwxr-x. 4 mysql mysql 165 Dec 10 18:01
以及 mysql 目录本身的权限:
ls -haltr /home/development | grep mysql
drwxrwxr-x. 4 mysql mysql 165 Dec 10 18:01 mysql
答案1
查看你的 systemd mariadb.service 脚本。默认脚本包含 ProtectHome,以确保 mysqld 出于安全原因无法访问 /home/ 下的任何内容。
您是否有充分的理由偏离默认路径而不使用绑定挂载?SELinux 和其他安全功能的存在都是有充分理由的。
答案2
确保执行以下操作。
1-干净的数据目录:
rm -rf /home/development/mysql/*
2- 为数据目录提供正确的权限:
chown -R mysql:mysql /home/development/mysql
3-复制旧目录的内容保存原始权限:
cp -R -p /var/lib/mysql/* /home/development/mysql
4-mysql.sock路径应该相同客户&迈斯尔德部分。
5-开始mariadb 服务:
systemctl start mariadb
编辑 :
我建议最后再创建另一个目录并在其中尝试。如果仍然不起作用,请返回 /var/lib/mysql 备份您的数据库,更改 /var/lib/mysql 名称并重新安装或在新目录中启动 mariadb-install-db,然后恢复您的数据库。另外,避免将数据库放在主目录下,创建一个专用 fs,因为如果用户“development”被删除,数据库也会随之删除。