我今天在我的 Amazon Red Hat 实例上遇到了同样的问题。我既不能执行 mysql decribe(来自 mysql shell)也不能执行 mysqldump。为了解决这个问题,我尝试了最明显的解决方案:
# chown root:root /tmp -v
# chmod 1777 /tmp -v
# /etc/init.d/mysqld restart
但这没有帮助。在 /var/log/mysqld.log 我仍然看到:
141022 10:23:35 InnoDB: Error: unable to create temporary file; errno: 13
141022 10:23:35 [ERROR] Plugin 'InnoDB' init function returned error.
141022 10:23:35 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
结果证明是 SELinux 不允许 MySQL 守护进程写入 /tmp。因此,我所做的是:
# getenforce
Enforcing
验证 SELinux 是否在强制模式下运行(您可以在此处阅读更多相关信息)。快速而快速的解决方案是切换到 SELinux 许可模式:
# setenforce 0
# getenforce
Permissive
# /etc/init.d/mysqld restart
以上解决了我的问题。
请注意,如果您正在处理强化生产,则在从强制切换到许可时应该非常小心。另请注意,此特定设置将在重新启动后重置。