私はMySQLをCentOSにインストールしています(詳細バージョンは以下にあります)。私のOSはVMマシンであり、物理マシンではありません。ディレクトリ/data/mysql
はローカルディスク(仮想)です。仮想化環境で追加の手順を実行する必要があると思われます。 。 リンクにはSELinuxと仮想化に関する情報があります ですが、MySQLに含める方法はわかりません。
MySQLは/var/lib/mysql
のデータディレクトリで正常に動作しますが、別のディスクの別のディレクトリに移動すると、機能しなくなります。一方、同じディスク上の異なるディレクトリが機能します。 SELinuxを無効にすると、MySQLは別のディスクで動作します。 SELinuxは別のドライブを制限しています。私は次の2つのリンクで与えられた解決策を試しました
特に、次の2つのコマンド:
$ 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 /」に変更できません(エラーコード:13-アクセスが拒否されました)
他に何かする必要がありますか?
実行しているコマンドや、SELinuxに関して/data/mysql
の追加にどのように取り組んでいるかという点で、あなたが行っていることに直接問題はありません。
物事が適切に機能していることを確認するために、存在するかどうかを確認するか、手動でこの行を/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データベースの場所の変更 で説明されている手順と比較して、実行している手順を再確認します。
この問題は、MySQLdatadirが/ homeの下のどこかに移動されたときに、Debian9およびその他のsystemdベースのディストリビューションでSELinuxおよびAppArmorなしで発生する可能性があります。
この理由は、systemdサービスファイル(/lib/systemd/system/mariadb.service)にProtectHome = trueという設定が含まれているためです。この設定により、MySQLは/ homeの下のフォルダーに書き込むことができなくなり、起動時にErrNo 13:Permission Deniedエラーがスローされます。
修正は、データディレクトリを/ 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デーモン-リロード#systemdサービスを更新して、オーバーライドファイルが表示されるようにします
4:Sudo systemctl start mysql#そして最終的に開始するはずです
このエラーは、OS特権の問題が原因です。以下のコマンドを実行してください。
semanage fcontext -a -e /var/lib/mysql /opt/mysql
restorecon -R -v /opt/mysql