Мануалы и рекомендации ·

Selinux, MariaDB и перенос директории

На сервере с CentOS 7 и активным Selinux’ом потребовалось для MariaDB изменить дефолтную директорию с базами.

Настройка.

  1. Для начала, так как перенос попросили сделать в /home/mariadb директорию (не самый лучший выбор на самом деле), копируем туда все необходимые файлы, и корректируем права:
# systemctl stop mariadb
# cp -arvp /var/lib/mysql /home/mariadb
  1. В /etc/my.cnf указываем путь до директории с файлами баз. При необходимости корректируем другие параметры.
[mysqld]
datadir=/home/mariadb
socket=/home/mariadb/mysql.sock
  1. Для того, что бы Selinux не мешал запуску и работе сервера баз, делаем следующее:
# semanage fcontext -a -t mysqld_db_t "/home/mariadb(/.*)?"
# restorecon -R -v /home/mariadb
  1. Перезапускаем 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