我正在运行 RedHat 6.2 Amazon EC2 实例,使用普通 Apache 和 IUS PHP53u+MySQL (+mbstring、+mysqli、+mcrypt),以及来自 git 的 phpMyAdmin。所有配置都接近原始配置,假设安装过程已描述。
我一直尝试使用 phpMyAdmin 将 SQL 文件导入数据库,以便从服务器上的目录中读取它们。phpMyAdmin 在下拉列表中正确列出了文件,但在实际尝试导入时返回“无法读取文件”错误。此外,当尝试对文件执行 file_get_contents(); 时,它还会返回“无法打开流:权限被拒绝”错误。
事实上,当我的兄弟尝试以具有所有权限的经过身份验证的 MySQL 用户身份使用 MySQL“SOURCE”导入 SQL 文件时,他在读取文件时遇到错误。看来我们无法使用 SSH 下 root 以外的任何方法读取/导入这些文件(虽然我不能说我已经尝试了所有可能的方法)。在具有相同 LAMP 堆栈配置的常规 CentOS(5、6、6.2)安装下,我从未遇到过此问题。
我在 Google 和 StackExchange 上搜索后尝试过以下方法:
- CHMOD 0777 目录和文件,
- CHOWN root,apache(我能想到的 PHP 只使用两个用户),
- 导入 SQL 文件的总大小低于 upload_max_filesize 和 post_max_size,
- PHP open_basedir 注释掉,或 =“/var/www”(我的网站在该目录中使用 Apache VirtualHosts,并且所有 SQL 文件都位于该目录深处),
- PHP 安全模式已关闭(从未打开过)
目前,我已经通过直接使用 FILE UPLOAD 方法向 phpMyAdmin 解决了较小文件的问题,但由于我没有稳定的互联网连接,这不适合上传我的 200+ MiB SQL 文件。
如果您能就此情况提供任何线索,我将不胜感激。我对 Linux 很公平,对于确实让我困惑的问题,Google 通常能给出答案。但这次不是!
答案1
如果该文件已可供 mysql 用户读取,则向导入该文件的 mysql 用户授予 FILE 权限。
答案2
SELinux 是否已启用?除非您的安全要求强制启用,否则请禁用它。要查找答案,请检查 /etc/sysconfig/selinux 的内容。
答案3
我们采用了 cyberx86 的建议(我应该记得在基本 SQL 管理时代就采用过)一段时间,效果很好,但最后我终止了实例(并选择了 Amazon Linux 而不是 RedHat)。我们不再遇到这个问题。值得注意的是,这种方法是我们在最终生产服务器的 Amazon Linux 实例中使用的方法。
我相信 SELinux 可能是造成此问题的原因,但目前无法确认(或投票支持)。
干杯!