На сервере с CentOS 7 и активным Selinux’ом потребовалось для MariaDB изменить дефолтную директорию с базами.
Настройка.
1. Для начала, так как перенос попросили сделать в /home/mariadb директорию (не самый лучший выбор на самом деле), копируем туда все необходимые файлы, и корректируем права:
# systemctl stop mariadb # cp -arvp /var/lib/mysql /home/mariadb
2. В /etc/my.cnf указываем путь до директории с файлами баз. При необходимости корректируем другие параметры.
[mysqld] datadir=/home/mariadb socket=/home/mariadb/mysql.sock
3. Для того, что бы Selinux не мешал запуску и работе сервера баз, делаем следующее:
# semanage fcontext -a -t mysqld_db_t "/home/mariadb(/.*)?" # restorecon -R -v /home/mariadb
4. Перезапускаем MariaDB, и если всё было сделано верно, сервер БД заработает в обычном режиме.
# systemctl start mariadb
Возможные ошибки.
- Иногда, при переносе файлов сервера БД в /home директорию, сервис может не запуститься, например, с таким сообщением об ошибке:
[Warning] Can't create test file /home/mariadb/beta.lower-test
Для её исправления нам нужно создать собственный unit файл, из стандартного системного, и изменить в нём параметр ProtectHome= на false.
# cp /usr/lib/systemd/system/mariadb.service /etc/systemd/system/ # cat /etc/systemd/system/mariadb.service | grep "ProtectHome=" ProtectHome=false # systemctl daemon-reload # systemctl restart mariadb
- Так же, в ходе настройки может возникнуть примерно такая ошибка:
[ERROR] Can't init tc log
Для исправления просто переименовываем tc.log файл в директории сервера БД и пробуем перезапустить сервис.
# mv /home/mariadb/tc.log /home/mariadb/tc.log.old # systemctl restart mariadb
Почему /home/mariadb не лучший выбор?