MariaDB启动失败,输出如下。

MariaDB启动失败,输出如下。

我全新安装了 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”被删除,数据库也会随之删除。

相关内容