У меня есть свежая установка Centos 7.6, которая включает стандартную схему разделов для установки Centos 7.6. Что включает в себя раздел каталога «/» размером 50 ГБ. Я хотел бы переместить каталог данных 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
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
Посмотрите на свой скрипт systemd mariadb.service. По умолчанию используется ProtectHome, чтобы mysqld не мог получить доступ ни к чему в / home / по соображениям безопасности.
Есть ли у вас очень веская причина отклониться от путей по умолчанию вместо использования bind-mount? SELinux и другие функции безопасности существуют по очень веским причинам.
Убедитесь, что выполняются указанные ниже действия.
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 путь должен быть таким же на клиент & mysld раздел.
5- Начало служба mariadb:
systemctl start mariadb
РЕДАКТИРОВАТЬ :
Напоследок я бы посоветовал создать еще один каталог и попробовать в нем. Если это все еще не работает, вернитесь в / var / lib / mysql, сделайте резервную копию вашей базы данных, измените имя / var / lib / mysql и выполните новую установку или запустите mariadb-install-db в новом каталоге, а затем восстановите свою базу данных. Также избегайте помещения базы данных в домашний каталог, создайте выделенную файловую систему, потому что, если пользовательская "разработка" будет удалена, база данных уйдет вместе с ней.