【问题标题】:Unknown/unsupported storage engine: InnoDB未知/不支持的存储引擎:InnoDB
【发布时间】:2016-01-11 14:18:34
【问题描述】:

我正在设置一个复制服务器,当我第一次尝试启动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 完美配合?

【问题讨论】:

    标签: mysql centos selinux


    【解决方案1】:

    我只需要删除两个文件:

    ib_logfile0
    

    ib_logfile1
    

    然后回去启动mysql一切正常

    【讨论】:

    • 对于在 Mac 上使用自制软件的任何人,我在 /usr/local/var/mysql/ib_logfile0/usr/local/var/mysql/ib_logfile1 找到了这些文件的位置。删除它们解决了问题。
    • 我还不得不删除ibdata1文件和目录performance_schema
    【解决方案2】:

    这解决了我的问题

    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
    

    【讨论】:

    • 也许第二个 autoremove 应该是 autoclean
    【解决方案3】:

    好的,这实际上是much easier than expected

    默认情况下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  ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多