我正在尝试从本地计算机在线远程连接到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(); }
我克服了挑战。我发现我的远程MySQL数据库主机仍使用旧的MySQL密码哈希(16字节),而我的本地主机数据库服务器使用41字节的密码哈希。我使用以下查询来查找密码长度:
SELECT PASSWORD('mypass')
我通过运行以下查询将localhost数据库服务器密码哈希更改为16字节
SET GLOBAL old_passwords = 1;
然后,我编辑了my.ini文件,并设置,old_password=1以确保服务器重新启动时不会恢复为新的密码系统。但这并不能解决我的问题。
my.ini
old_password=1
我发现使用PHP的是由PHP处理的身份验证,因为我使用PHP的MySQL API,所以我降级了,PHP 5.2.8并且能够成功建立远程连接。
PHP
MySQL
API
PHP 5.2.8
我希望这可以帮助别人。