一尘不染

MySQL远程连接因“身份验证方法未知”而失败

mysql

我正在尝试从本地计算机在线远程连接到MySQL服务器,但出现以下错误:

Warning: PDO::__construct(): The server requested authentication 
method unknown to the client [mysql_old_password] in 
C:\xampp\htdocs\ticket\terminal\sync.php

SQLSTATE[HY000] [2054] The server requested authentication method 
umknown to the client

我的本地MySQL服务器版本为5.5.27,libmysql-mysqlnd 5.0.10远程MySQL服务器版本为5.5.23,未公开mysqlnd版本。

我猜这是一个不兼容的密码哈希问题,但我不知道如何解决它。以下是我的连接代码的一部分

$dsn = 'mysql:host=184.173.209.193;dbname=my_db_name';
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);

try {
    $online_dbh = new PDO($dsn, 'myusername', 'mypassword', $options);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Congratulations!";
} catch (PDOException $e) {
    echo $e->getMessage();
}

阅读 444

收藏
2020-05-17

共1个答案

一尘不染

我克服了挑战。我发现我的远程MySQL数据库主机仍使用旧的MySQL密码哈希(16字节),而我的本地主机数据库服务器使用41字节的密码哈希。我使用以下查询来查找密码长度:

SELECT PASSWORD('mypass')

我通过运行以下查询将localhost数据库服务器密码哈希更改为16字节

SET GLOBAL old_passwords = 1;

然后,我编辑了my.ini文件,并设置,old_password=1以确保服务器重新启动时不会恢复为新的密码系统。但这并不能解决我的问题。

我发现使用PHP的是由PHP处理的身份验证,因为我使用PHPMySQL API,所以我降级了,PHP 5.2.8并且能够成功建立远程连接。

我希望这可以帮助别人。

2020-05-17