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

На сервере с 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

@SysadminNotes | https://sysadmin.pm

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *