登录 注册
首页 » 深圳 » 客栈通 » 旅游资讯 » 【站务手记】2014年1月1日升级说明

客栈通

主页 日志 地图 微博 点评

【站务手记】2014年1月1日升级说明

2014-01-02 14:08
升级到php5.5之后mysqlnd无法连接mysql库的解决方法(授权问题)

昨天把把redhat服务器上的php升级到php5.5.7,原来版本是php5.2.14;

编译完成后,看phpinfo一切正常,多了一个mysqlnd,(php5.3开始使用mysqlnd作为连接器,这是一个最大区别),不过问题发生了:无法启动mysql, 几经辗转启动mysql后,又无法使原项目运行;
试图启动mysqld或者mysqld_safe都不行。phpmyadmin报错:
phpMyAdmin - Error
#2000 - 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 value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file




其实这是个比较智能的报错,也提示了问题的根源,但当时没有仔细研究这个提示,盲目地试图更新mysql版本,也未解决问题;

今天开始重新研究此问题, 搜索了很多例子;最后试了下包括先越权启动mysqld

./mysqld_safe --user=mysql --skip-grant-tables

发现可以启动,然后使用mysql -uroot -p 进入命令行修改了root密码,掌握了root密码,能够进入命令行,这表明有进展;最后参考了:-http://stackoverflow.com/questions/1575807/cannot-connect-to-mysql-4-1-using-old-authentication
于是迎来了曙光:

启动mysqld;
mysql -uroot -p 进入mysql命令行;
select user,host,length(password) from mysql.user;(这一步如发现结果长度都是16位,表明问题就在这里);
SET old_passwords = 0; (将原来16位密码模式关闭);
SET PASSWORD FOR 用户名@localhost=PASSWORD('原密码或新密码'); 刷新密码(将16位密码刷新后变为41位存储);
重新运行3,如发现结果列表中的length由16变为41,表明成功;
最好重启一下mysql服务,运行项目问题解决;


总结:此问题的根源在于mysqlnd不兼容原来mysql.user表中的16位密码存储,而导致权限问题,进而无法连上数据库。主要解决方法就是 SET old_passwords=0; 这一句,然后刷新mysql下每个项目用户的密码,使之变为41位存储,即可解决;


关键词:mysqlnd,old_passwords,16位密码——》41位密码;


祝各位新年快乐!财源广进!
 阅读(1473)  评论(0)  阅读版式
评论

未登录,会员登录后即可发表评论。立即登录...

推荐旅游资讯

双廊蓝影客栈——入住必读

来双廊的常见问题解答

徒步穿越最纯净的色达和他们的佛学世界

5.1自驾活动佛国净土色达自驾4日游

丽江清泉居(原玩笑客栈)2011年开业

川藏线包车318旅游须知

丽江净心园(云天宫私人客栈)客房简介

海上花旅馆:关于三亚海鲜那点事

甩掉那些轻飘的诺言爱上海边小筑

2015年再不去西藏我们就老了

甘南旗风户外2015大美甘南川北深度旅行

丽江云天宫(净心园)高级私人客栈庭院

丽江云天宫客栈:云天宫的前世今生

叉叉纳里海边客栈亦心楼客房及价格

深圳定向越野活动:4月增江、笔架山

推广
客栈通 2010-2019 © kezhantong.com 关于 合作 联系
深圳市狂屈信息咨询有限公司 版权所有 粤ICP备10216158号
客栈通 - 深圳