Unknown/unsupported 存储引擎:InnoDB
Unknown/unsupported storage engine: InnoDB
我正在设置一个复制服务器,当我第一次尝试启动 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
。
如何配置 MySQL 以与 SELinux 完美搭配?
好的,这实际上是 much easier than expected。
默认情况下 SELinux
是 Enforcing
,这可以防止对文件系统进行意外写入。我只需要告诉 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 ]
这解决了我的问题
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
我只需要删除两个文件:
ib_logfile0
和
ib_logfile1
然后回去开始mysql一切正常
我正在设置一个复制服务器,当我第一次尝试启动 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
。
如何配置 MySQL 以与 SELinux 完美搭配?
好的,这实际上是 much easier than expected。
默认情况下 SELinux
是 Enforcing
,这可以防止对文件系统进行意外写入。我只需要告诉 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 ]
这解决了我的问题
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
我只需要删除两个文件:
ib_logfile0
和
ib_logfile1
然后回去开始mysql一切正常