phpmyadmin 无法连接到远程 MySQL 实例

phpmyadmin 无法连接到远程 MySQL 实例

我有一个 LAMP 堆栈盒(CentOS 6)和另一个运行 mysql 服务器的 CentOS 6 盒。

我已经在 LAMP 框上安装了 phpmyadmin,但我根本无法让它与我的 SQL 框对话。

我在 config.inc.php 中配置了以下内容

/* Servers configuration */
$i = 0;

/* Server: usp-ggdb2 [1] */
$i++;
$cfg['Servers'][$i]['verbose'] = 'usp-ggdb2';
$cfg['Servers'][$i]['host'] = '10.1.2.3';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';

当我浏览 phpmyadmin 网站时出现以下错误:

#2002 - 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器(2)服务器没有响应(或者本地服务器的套接字配置不正确)。

我不知道为什么它说尝试连接到当地的服务器,因为我只配置了一台服务器(并且它是远程的)。

如果我使用 tcpdump,我可以看到它没有尝试与我指定的 IP 建立连接。

就好像我的配置文件被忽略了一样。

有没有办法打开更多调试信息?欢迎提出任何建议!

答案1

我已经解决了这个问题。事实上,我的配置文件被忽略了。我一直在将 config.inc.sample.php 复制到网站顶级目录 (/var/www/html/pma) 中的 config.inc.php。

但是,在 CentOS 6 上有一个单独的配置目录 -- /etc/phpMyAdmin/。一旦我将配置复制到那里,一切就都正常了。

答案2

RHEL 6 和 CentOS 6 中的标准设置之一是 SELinux 默认为强制模式。您可以使用命令来验证这一点getenforce

如果处于Enforcing模式,验证 SELinux 是否是罪魁祸首的最快方法通常是使用 暂时禁用 SELinux setenforce 0。如果禁用 SELinux 后一切正常,则确认无误。

将 SELinux 返回到强制模式,setenforce 1并将管理 Web 应用程序基于网络的数据库访问的策略设置为允许:

   setsebool -P httpd_can_network_connect_db 1

如果 MySQL 数据库正在监听非标准端口,则可能不足,您可以尝试允许通用网络策略:

  sesebool -P httpd_can_network_connect 1 

答案3

我遇到了导致此错误的另一个原因。您需要满足以下条件

  1. 使用适用于 PHP 的 MySQL Native Driver(推荐)
  2. 使用 MySQL 5.6 或更高版本
  3. 使用自签名 SSL 证书进行 MySQL 通信

正如所述这个PHP错误,MySQLND 将遵循 MySQL 的偏好并尝试验证 SSL 证书。由于无法验证(自签名),因此连接会失败并出现 2002 错误(很好,很模糊!)

如错误中所述,PHP 5.6.16(7.0 及以上版本中也存在)添加了另一个mysqli_real_connect名为的连接选项MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT,该选项禁用了 MySQLND 端的 SSL 证书验证。对于 PMA 4.6.0 之前的版本,您必须编辑libraries/dbi/DBIMysqli.php并编辑以下行

$client_flags |= MYSQLI_CLIENT_SSL;

并将其替换为(仅适用于 PHP 5.6.16 或更高版本)

$client_flags |= MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT;

对于 PMA 4.6.0 或更高版本,您只需在配置中设置

$cfg['Servers'][$i]['ssl_verify'] = false;

相关内容