首先,下面的描述仅限于Win系统。我没试过其他系统。
从mysql 4.1.1开始,修改了用户密码的格式,从16位修改为41位,并采用了新的认证方式。
但是之前的4.1客户端协议不支持这种方式,所以造成了无法登录的后果。
即使密码正确,无法正常登录,提示如下
#1250 -客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
在窗口中执行:
c:mysqlbin & gt;欢迎使用MySQL monitor。命令以结尾;或者g .
您的MySQL连接id是1到服务器版本:5 . 0 . 0-alpha-nt
键入“help”或“h”表示帮助。键入“c”清除缓冲区。
MySQL & gt;选择密码(' aa ');
+-+
| password(' aa ')|
+-+
| * dee 59 c 300700 af9 b 586 f 9 f2a 702231 c0 AC 373 a 13 |
+-+
1行in set(0.00 sec)
MySQL & gt;
从上面可以看出,password的结果返回一个以' * '开头的41位字符串,而以前是16位的。
Mysql官网给出了两种解决方案。
1、使用新的客户端api,
2.强制服务器使用旧的密码方案
首先,我尝试了第一种方法,将libmysql.dll从mysql5.0复制到php的扩展目录,而不是php自带的libmysql.dll,但结果令人失望。Php提示加载php_mysql.dll失败:
PHP警告:PHP启动:无法加载动态库' c:/PHP 5/ext/PHP _ MySQL . dll '-找不到指定的程序。
后来发现新版dll中少了函数mysql_drop_db():(只等php或者mysql释放更新后的dll。
第一种方法不行,只能试试第二种方法。mysql的官方FAQ说需要添加参数-old-password。
我第一次尝试在命令行启动mysql,
c:mysqlbin & gt;mysqld-nt-旧密码
在另一个窗口运行。
以下是引用的内容:c:mysqlbin >:MySQL-u root
欢迎来到MySQL monitor。命令以结尾;或者g .
您的MySQL连接id是540到服务器版本:5 . 0 . 0-alpha-nt
键入“help”或“h”表示帮助。键入“c”清除缓冲区。
MySQL & gt;选择密码(“我的密码”);
+-+
| password(' my password ')|
+-+
| 162 eebfb 6477 e5d 3 |
+-+
集合中的1行(0.55秒)
MySQL & gt;
[省略弯路和一些..........]
我在c:windowsmy.ini (xp,98,所以2000年应该在c:wint下)“mysqld & quot在该节中加入“。set-variable =旧密码& quot
示例:
以下是引用的内容:[mysqld]
basedir = c:/MySQL
set-variable = old-passwords
datadir = c:/MySQL/data
[winmysql admin]
server = c mysqld-nt . exe
user = root
password = my password
很好,一切都很好,
后来我发现只要在mysql.user表中把password的字段长度改成16,系统就会自动切换到旧密码模式,再改回41之后就会自动切换到新的认证模式。
这里提醒一下,更改密码方法后,要重置密码,刷新权限(或者重启mysql)
关键词:问题,答案,登录,不能,
优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。本文链接:http://www.123down.cn/gonglue/227254.html