未知/不支持的存储引擎:InnoDB

a c*_*der 4 mysql centos selinux

我正在设置一个复制服务器,当我第一次尝试启动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
Run Code Online (Sandbox Code Playgroud)

我确认用户mysql看到并且能够写入/databases/mysql/mysql_slow_queries.log.

然后我检查getenforce并看到它被设置为Enforcing.

如何配置MySQL以便与SELinux很好地配合?

Chr*_*oti 9

我只需要删除两个文件:

ib_logfile0
Run Code Online (Sandbox Code Playgroud)

ib_logfile1
Run Code Online (Sandbox Code Playgroud)

然后回去开始mysql一切正常

  • 我还必须删除“ibdata1”文件和目录“performance_schema” (3认同)

And*_*s B 5

这解决了我的问题:

sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo apt-get autoremove
sudo apt-get autoclean

sudo rm /var/lib/mysql/ib_logfile0
sudo rm /var/lib/mysql/ib_logfile1

sudo apt-get install mysql-server
Run Code Online (Sandbox Code Playgroud)

  • 也许第二个_autoremove_应该是_autoclean_? (2认同)

a c*_*der 1

好吧,这实际上比预期容易得多

默认情况下SELinuxEnforcing,这可以防止文件系统上的意外写入。我只需要告诉 SELinux MySQL 可以写入非标准目录。以机智:

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

德普。要安装semanage,请使用以下命令:

yum install policycoreutils-python
Run Code Online (Sandbox Code Playgroud)

现在再次运行该命令。这可能需要一些时间...

[root@ravioli]# semanage fcontext -a -t mysqld_db_t "/databases/mysql(/.*)?"
Run Code Online (Sandbox Code Playgroud)

通过查看此配置文件来检查 SELinux 是否已为此新目录进行配置:

[root@ravioli]#  grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local

/databases/mysql(/.*)?    system_u:object_r:mysqld_db_t:s0
Run Code Online (Sandbox Code Playgroud)

可以添加其他目录,例如,如果您在某处有专用的 tmp 目录。

[root@ravioli]# semanage fcontext -a -t mysqld_db_t "/databases/mysql_tmp(/.*)?"
Run Code Online (Sandbox Code Playgroud)

再次检查配置:

[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
Run Code Online (Sandbox Code Playgroud)

最后,使用更新权限restorecron

restorecon -R -v /www/databases/mysql/
Run Code Online (Sandbox Code Playgroud)

在我的设置中,

restorecon -R -v /www/databases/mysql_tmp/
Run Code Online (Sandbox Code Playgroud)

现在发出:

service mysqld start
Run Code Online (Sandbox Code Playgroud)

贝尼。

Starting mysqld:         [  OK  ]
Run Code Online (Sandbox Code Playgroud)