レプリケーションサーバーをセットアップしていますが、mysqlサービスを初めて開始しようとすると、失敗します。
[root@ravioli mysql]# service mysqld start
MySQL Daemon failed to start.
Starting mysqld: [FAILED]
[root@ravioli mysql]# tail /var/log/mysqld.log
151013 13:41:27 [ERROR] Plugin 'InnoDB' init function returned error.
151013 13:41:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
/usr/libexec/mysqld: File '/databases/mysql/mysql_slow_queries.log' not found (Errcode: 13)
151013 13:41:27 [ERROR] Could not use /databases/mysql/mysql_slow_queries.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it.
151013 13:41:27 [ERROR] Unknown/unsupported storage engine: InnoDB
151013 13:41:27 [ERROR] Aborting
151013 13:41:27 [Note] /usr/libexec/mysqld: Shutdown complete
151013 13:41:27 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
ユーザーmysql
が/databases/mysql/mysql_slow_queries.log
を見て、書き込むことができることを確認しました。
次に、getenforce
をチェックして、Enforcing
に設定されていることを確認しました。
SELinuxでうまく動作するようにMySQLを設定するにはどうすればよいですか?
わかりました、これは実際には 予想よりはるかに簡単でした 。
デフォルトでは、SELinux
はEnforcing
であり、ファイルシステムへの予期しない書き込みを防ぎます。 MySQLが非標準のディレクトリに書き込んでも問題ないことをSELinuxに伝える必要がありました。ウィットに:
[root@ravioli]# semanage fcontext -a -t mysqld_db_t "/databases/mysql(/.*)?"
-bash: semanage: command not found.
Derp。 semanage
をインストールするには、次を使用します。
yum install policycoreutils-python
ここで、コマンドを再度実行します。これには少し時間がかかる場合があります...
[root@ravioli]# semanage fcontext -a -t mysqld_db_t "/databases/mysql(/.*)?"
この設定ファイルを見て、SELinuxがこの新しいディレクトリ用に設定されていることを確認します。
[root@ravioli]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local
/databases/mysql(/.*)? system_u:object_r:mysqld_db_t:s0
たとえば、専用のtmpディレクトリがどこかにある場合は、ディレクトリを追加できます。
[root@ravioli]# semanage fcontext -a -t mysqld_db_t "/databases/mysql_tmp(/.*)?"
構成を再度確認します。
[root@ravioli]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local
/databases/mysql(/.*)? system_u:object_r:mysqld_db_t:s0
/databases/mysql_tmp(/.*)? system_u:object_r:mysqld_db_t:s0
最後に、restorecron
を使用して権限を更新します
restorecon -R -v /www/databases/mysql/
そして私のセットアップでは、
restorecon -R -v /www/databases/mysql_tmp/
今発行:
service mysqld start
ベネ。
Starting mysqld: [ OK ]
必要なのは、次の2つのファイルを削除することだけでした。
ib_logfile0
そして
ib_logfile1
その後、mysqlの起動に戻ってすべてが機能しました
これで私の問題は解決しました
Sudo apt-get remove --purge mysql-server mysql-client mysql-common
Sudo apt-get autoremove
Sudo apt-get autoremove
Sudo rm /var/lib/mysql/ib_logfile0
Sudo rm /var/lib/mysql/ib_logfile1
Sudo apt-get install mysql-server