Разрешение MySQL отклоняло ошибку даже после установки контекста безопасности для SELinux на виртуальной машине

У меня установлен MySQL на CentOS (подробные версии приведены ниже). Моя ОС – это машина VM, а не физическая машина, каталог /data/mysql – это локальный диск (виртуальный). Я подозреваю, что мне, возможно, понадобится сделать некоторые дополнительные шаги в виртуализованной среде. Эта ссылка содержит некоторую информацию о SELinux и виртуализации, но не уверен, как включить ее для MySQL.

MySQL отлично работает с каталогом данных в /var/lib/mysql но в тот момент, когда я перемещаю его в другой каталог на другом диске, он перестает работать. В то время как работает другой каталог на том же диске. Если я отключу SELinux, MySQL работает с другим диском. SELinux ограничивает разные диски. Я попробовал решение, указанное в следующих двух ссылках

  • SELinux и MySQL
  • Re: Перемещено datadir и теперь получаю: ERROR! Сервер завершает работу без обновления PID-файла

В частности, следующие две команды:

 $ semanage fcontext --add --type mysqld_db_t '/data/mysql(/.*)?' $ restorecon -r /data/mysql 

Когда я запускаю:

 $ ls -dZ /data/mysql 

Я получаю следующее:

 drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:SystemLow 

Тем не менее я продолжаю получать:

/ usr / sbin / mysqld: Невозможно изменить dir на '/ data / mysql /' (Errcode: 13 – Permission denied)

Есть что-то еще, что мне нужно сделать?

  • MySQL: mysql Ver 14.14. Распространение 5.6.14 для Linux (x86_64) с использованием обложек EditLine
  • ОС: релиз CentOS 6.4 (Final)

Я не вижу ничего прямого в том, что вы делаете с точки зрения команд, которые вы используете, или того, как вы приближаетесь к добавлению /data/mysql отношении SELinux.

Чтобы убедиться, что все работает правильно, я бы проверял, присутствует ли этот /etc/selinux/targeted/contexts/files/file_contexts.local и / или вручную добавляет эту строку в /etc/selinux/targeted/contexts/files/file_contexts.local .

 /data/mysql(/.*)? system_u:object_r:mysqld_db_t:s0 

Когда я повторил ваши шаги выше, я добавил, что эта строка добавлена ​​в файл file_contexts.local как и ожидалось.

Я бы дважды проверял ваши шаги, которые вы предпринимаете, против шагов, описанных здесь в этом конкретном документе Redhat под названием: 10.4.1. MySQL Изменение местоположения базы данных .

Эта проблема может возникнуть без SELinux и AppArmor в Debian 9 и других дистрибутивах на основе systemd, когда MySQL-датадер перемещается где-либо в / home.

Причиной этого является файл службы systemd (/lib/systemd/system/mariadb.service), содержащий параметр: ProtectHome = true . Этот параметр запретит MySQL писать в любую папку под / home и, таким образом, будет вызывать ошибки ErrNo 13: Permission Denied при запуске.

Исправление состоит в том, чтобы либо переместить dir данных из / home, либо иначе, чтобы отключить эту функцию безопасности в файле службы systemd:

1: sudo cp /lib/systemd/system/mariadb.service / etc / systemd / system / # сделать локальное переопределение служебного файла

2: Редактировать /etc/systemd/system/mariadb.service и изменить ProtectHome как false ( ProtectHome = false ). Сохранить файл

3: sudo systemd daemon-reload # обновить службы systemd, чтобы он увидел ваш файл переопределения

4: sudo systemctl запустить mysql #, и он должен, наконец, начать