1. ホーム
  2. mysql

[解決済み] 不明/サポートされていないストレージエンジン:InnoDB

2022-02-07 05:08:18

質問

レプリケーションサーバーを構築しているのですが、初めて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 をうまく使うにはどうしたらいいですか?

どのように解決するのですか?

OK これは実際に 予想よりずっと簡単 .

デフォルトでは SELinuxEnforcing これは、ファイルシステム上で予期しない書き込みを防ぐものです。 SELinux に MySQL が非標準のディレクトリに書き込んでも問題ないことを伝える必要があるだけです。 ウィットに富んでいます。

[root@ravioli]# semanage fcontext -a -t mysqld_db_t "/databases/mysql(/.*)?"
-bash: semanage: command not found.

ダープ をインストールするには 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  ]