连接mysql问题 mysqlnd cannot connect to MySQL 4.1+ using old authentication

第一篇:PHP5.3开始使用MySqlND作为默认的MySql访问驱动,而且从这个版本开始将不再支持使用旧的用户接口链接Mysql了,你可能会看到类似的提示:

#2000 - mysqlnd cannot connect to MySQL 4.1+ using old authentication

解决问题的方法不是调整PHP,而是检查你的Mysql,你需要确保两件事:

  • 你使用的Mysql是4.1+以上版本,4.1以前的版本只支持使用老的16位密码存储
  • 你准备用于连接的数据库帐号使用的MySql的新密码格式(41位的数据)

解决问题2的方法是重新设置账户的密码,并确保使用的标准Password()函数设置账户密码,相关指令如下:

-- 选择系统库USE `mysql`-- 显示当前的用户和密码,注意新的的密码格式应该是41位的加密字符,老的是16位的SELECT `user`,`password` from `user`;-- 更新指定的用户的密码,注意使用函数 password()-- 有时针对一些特殊需要,你可以使用old_password()函数来建立一个或几个向下兼容的数据库账户UPDATE `user` SET `password`=password(‘newpassword‘) WHERE `user`=‘UserName‘;-- 刷新MySql权限库FLUSH PRIVILEGES;-- 最后别忘记了,MySql的命令行连接方式是:MySql -u [email protected] -p password
 
第二篇:最近开发环境升级到了 php 5.3.2, 链接 remote mysql 却发生了错误:
connection failed:SQLSTATE[HY000] [2000] mysqlnd cannot connect to MySQL 4.1+ using old authentication
remote 的 mysql db my.cnf:
[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Default to using old password format for compatibility withmysql 3.x

# clients (those using the mysqlclient10 compatibilitypackage).

old_passwords=1

是采用兼容格式的密码,而 php5.3的php_mysql; php_pdo_mysql采用的是增强的密码,所以导致两者不匹配,最方便的方式还是更新db的设置,取消 old_passwords
然后在 mysql.mysql.user,更新所有用户的密码, 如:
update user set password=PASSWORD(‘new password‘) where user=‘thisuser‘;
flush privileges;
即可
不过更新my.cnf 需要重新启动 mysql ,对于应用中的服务器,不是必要就千万别更新php客户端了,哈哈

第三篇:

新的mysqlnd库需要使用MySQL 4.1新的41-byte的密码格式

使用旧的16字节的密码将导致mysql_connect()和类似的函数产生一个错误:mysqlnd cannotconnect to MySQL 4.1+ using old authentication.(mysqlnd不能用旧的验证方式来连接到MySQL 4.1以上的版本)

解决方法

这个比较变态 研究了好久 最后发现问题出在 my.cnf

1居然配置了old-password=1或者是old_password=1(把这一句注释掉)

2去掉之后 使用 set password for‘root’@‘localhost’ = password(‘xxx’)

为root生成了新的41位密码 问题解决

第四篇:官方的說法是

MySQL 4.1 and up uses an authentication protocol based on apassword hashing algorithm that is incompatible with that used byolder clients. .....

如果你升級mysql到4.1以上版本后遇到以上問題,請先確定你的mysql client 是4.1或者更高版本.

請使用以下2種方法之一

其一: (使用AppServ在修改mysql密碼時要使用下列方法才行)

mysql> SET PASSWORD FOR
   ->‘some_user‘@‘some_host‘ = OLD_PASSWORD(‘newpwd‘);

其二:

mysql> UPDATE mysql.user SET Password =OLD_PASSWORD(‘newpwd‘)
   -> WHERE Host =‘some_host‘ AND User = ‘some_user‘;
mysql> FLUSH PRIVILEGES;

上面some_user, some_host, newpwd是要自己填入的

摘自网络

时间: 2025-01-05 04:03:58

连接mysql问题 mysqlnd cannot connect to MySQL 4.1+ using old authentication的相关文章

mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication解决办法

mysqlnd是个好东西.不仅可以提高与mysql数据库通信的效率,而且也可以方便的设置一些超时.如,连接超时,查询超时.但是,使用mysqlnd的时候,有个地方需要注意.就是服务端的密码格式不能使用旧的16位的存储格式,而要使用新的41位的存储格式.如果,服务端的密码格式是16位,那么就会报错.信息如下:Fatal error: Uncaught exception ‘PDOException’ with message ‘SQLSTATE[HY000] [2000] mysqlnd cann

SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法

今天上班遇到的问题,新配的Linux服务器,php.Apache和一系列扩展插件装好后,在本地好好的程序移上去就一直抱数据库连接错误,而用sql命令却能连接上去, 做了一个简单的判断数据库连接页面还是不行,证明不是程序问题,而是php的哪里问题了,就在网上查了大半天 有些方法都不合情况后面偶然发现SELinux这个东西 查了下这个有限制httpd对外访问的权限:具体如下 输入命令:getsebool -a|grep -i httpd 里面会有一个 httpd_can_network_connec

如何解决远程连接mysql出现Can’t connect to MySQL server on (111 “Connection refused”)的问题

如何解决远程连接mysql出现Can't connect to MySQL server on (111 "Connection refused")的问题 开放Mysql的远程连接 在服务器上登录mysql,然后执行以下的命令. 登录mysql: /usr/local/mysql-5.6/bin/mysql -u root -p 执行赋权的命令: MySQL> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '1234

MySQL:Can't connect to mysql server 10038

1.防火墙高级设置 2.入站规则,新建规则 3.选择端口 4.输入MySQL端口例如'3306' 5.允许连接 6.下一步 7.自定义规则名称和描述,完成之后重新连接即可. MySQL:Can't connect to mysql server 10038

mysql问题,出现 Cant connect to mysql server on 'localhost'

莫名其妙的一个问题,这个问题出现在今天,然后查找下,发现需要重启服务器,但是重启也一样,于是关机重启,还是这个现象 ,然后看到 错误提示, 提示my.ini的第21行,产生错误,于是按照路径找到配置文件,然后更改第21行.C:\Program Files (x86)\MySQL\MySQL Server 5.1 发现第21行这样,然后把它注释掉,然后回到控制面板的服务管理中,将服务器重启,问题解决 mysql问题,出现 Cant connect to mysql server on 'local

mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication的解决方法

直接命令行操作没有问题,但是PHP连接就会报上面的错误. SET old_passwords =0; USE mysql; UPDATE user SET password =PASSWORD('yourpassword') WHERE user='testuser' limit 1; SELECT LENGTH(password) FROM user WHERE user='root'; FLUSH PRIVILEGES;

mysql_error:mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication

SET old_passwords =0; UPDATE mysql.user SET Password =PASSWORD('testpass') WHERE User='testuser' limit 1; SELECT LENGTH(Password) FROM mysql.user WHERE User='testuser'; FLUSH PRIVILEGES;

初次安装MySQL出现Can’t connect to MySQL server on ‘localhost’ (10061)

一开始去网上找,都是去服务中找对应的mysql服务,然后打开,可是我解压mysql之后,本地中并没有mysql服务,因此我要先要让我本机出现mysql服务 1.以管理员命令打开命令行,进入mysql的bin目录,执行指令:mysqld -install 2.当我们服务中出现mysql服务之后,不要着急打开服务,因为现在我们不知道初始密码,可以先初始化密码, 打开安装目录,找到data文件夹,直接删掉,没有最好,就不用删了(我是初次安装,所以可以随便执行删除的操作) 3.在命令行中初始化密码:my

mysqlnd cannot connect 连接错误处理方法

mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD(‘your_existing_password’). This will store a new, and more secure, hash valu