phpMyAdmin 使用 PHP 7.0.0 RC7 “无法登录到 MySQL 服务器”

Posted

技术标签:

【中文标题】phpMyAdmin 使用 PHP 7.0.0 RC7 “无法登录到 MySQL 服务器”【英文标题】:phpMyAdmin "Cannot log in to the MySQL server" with PHP 7.0.0 RC7 【发布时间】:2016-02-27 02:44:52 【问题描述】:

设置:

Debian 杰西 mysqld 5.5.46-0+deb8u1 来自 dotdeb.org 的 nginx 1.8.0 来自 dotdeb.org 的 php-fpm 7.0.0 RC7 phpMyAdmin 4.5.2

我最近在我的开发 Linux 机器上升级到 PHP 7.0 RC7。

从那时起,phpMyAdmin 只抛出“无法登录到 MySQL 服务器”以及“配置中定义的 controluser 连接失败”。没有进一步的消息、错误号或详细信息。

我还无法从中找到更多信息为什么连接失败(来自 phpMyAdmin 的高度抽象的类使它变得困难)。

非常感谢任何有关如何从 phpMyAdmin 获取更多信息的提示。

MySQL 服务器正在运行 我可以在终端上用mysql和mysqladmin命令登录 我尝试重置和刷新 MySQL 密码 我的GOGS 实例可以访问它 一个快速自制的 php 脚本也可以使用它(使用 mysqli)。 我在 phpMyAdmin 中尝试了基于套接字和基于 tcp 的访问 我尝试了基于配置和基于 http 的身份验证,结果相同

相关配置如下:

$cfg['Servers'][$i]['verbose'] = '';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '/var/run/mysqld/mysqld.sock';
$cfg['Servers'][$i]['connect_type'] = 'socket';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['ssl'] = true;

这是我的测试脚本,运行良好:

<?php
$_dbHost = 'localhost';
$_dbUser = 'root';
$_dbPass = 'mysupersecretrootpassword';
$_dbName = '';
$_dbPort = 0;
$_dbSock = '/var/run/mysqld/mysqld.sock';

$mysqli = new mysqli($_dbHost, $_dbUser, $_dbPass, $_dbName, $_dbPort, $_dbSock);

if ($mysqli->connect_errno) 
    echo "Error: Failed to make a MySQL connection, here is why: \n";
    echo "Errno: " . $mysqli->connect_errno . "\n";
    echo "Error: " . $mysqli->connect_error . "\n";
    exit;
 else 
    echo "Connection Successfull";

    $dbList = $mysqli->query('show databases;');
    echo "<pre>";
    var_dump($dbList->fetch_assoc());
    echo "</pre>";

?>

【问题讨论】:

此补丁可能有助于调试:gist.github.com/lem9/ff44392302a04b46ed13 查看您的 Web 服务器的错误日志以获取消息。 【参考方案1】:

设置:

Debian 8.2 (Jessie) PHP 版本:7.0.0-4 |来自希德 lighttpd/1.4.35 (ssl) 10.0.19-MariaDB-日志 | mysqlnd 5.0.12-dev - 20150407

使用套接字连接在 phpMyAdmin 版本 4.4.7、4.5.2 和 4.6.0-dev 上进行测试。

遇到了和你一样的问题,追查到 MySQL-Server 的安全连接。

临时修复:

在您的 config.inc.php (phpMyAdmin) 注释中

$cfg['Servers'][$i]['ssl'] = true;

它决定了 ssl 是否用于 phpMyAdmin 和 MySQL-Server 之间的连接。

侧面:

Marc Delisle 编写的补丁很可能会在该状态下引发错误,正确的是:

    error_log(var_export($this->_extension->getError(null), true));

然后您的网络服务器将记录如下内容:

    (mod_fastcgi.c.2695) FastCGI-stderr: PHP message: '#2006 - MySQL server has gone away'

在这种情况下更像是误报

更新 1:

/libraries/dbi/DBIMysqli.class.php 中设置 $client_flagsMYSQLI_CLIENT_SSL 常量似乎存在问题第 176 行。一旦这些设置完成,连接就会断开。

【讨论】:

迟到总比永不好。从 4.6.1 升级到 4.6.4 后,连接再次中断,将 'ssl' 设置为 'false' 再次修复它。至少这次错误消息包含 SSL 问题。【参考方案2】:

可能只是我,也许我遗漏了一些东西,但在您的上层脚本中,您似乎并没有像在测试脚本中那样传递用户,密码也是如此。

$cfg['Servers'][$i]['user']='root';
$cfg['Servers'][$i]['password']='mysupersecretpassword';

也许添加它会起作用。

【讨论】:

仅当您在 phpMyAdmin 中使用身份验证方法“config”时才需要这样做(我尝试过但失败并出现相同的错误)。我使用登录掩码提供凭据。测试脚本更容易对其进行硬编码。

以上是关于phpMyAdmin 使用 PHP 7.0.0 RC7 “无法登录到 MySQL 服务器”的主要内容,如果未能解决你的问题,请参考以下文章

使用 phpmyadmin 向用户添加产品

教义/变形器 v1.3.0 需要 php ^7.1 -> 您的 PHP 版本(7.0.0)不满足该要求。` 我无法更新 php 版本

使用 PHP/PHPMyAdmin 导出

chmod命令

sh 安装PHP7(https://www.colinodell.com/blog/2015-12/installing-php-7-0-0)

PHP 会话无法在 CentOS 上使用 phpMyAdmin