phpMyAdmin";无法登录MySQL服务器“;使用PHP 7.0.0 RC7


phpMyAdmin "Cannot log in to the MySQL server" with PHP 7.0.0 RC7

设置:

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

我最近在我的开发linux盒子上升级到了PHP7.0RC7。

从那以后,phpMyAdmin只抛出"无法登录MySQL服务器"answers"配置中定义的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>";
}
?>

设置:

  • Debian 8.2(Jessie)
  • PHP版本:7.0.0-4 |来自Sid
  • lighttpd/1.4.35(ssl)
  • 10.0.19-MariaDB-log|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:

在第176行的/librarys/dbi/DBIMysqli.class.php中设置$CLIENT_flagsMYSQLI_CLIENT_SSL常量似乎有问题。一旦设置了这些,连接就会被断开。

可能只有我,可能我遗漏了什么,但在您的上层脚本中,您似乎没有传递用户,这与测试脚本中不同,密码也是如此。

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

也许添加它会起作用。