Chinaunix首页 | 论坛 | 博客
  • 博客访问: 298450
  • 博文数量: 240
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-04 18:14
文章分类

全部博文(240)

文章存档

2017年(8)

2014年(4)

2013年(15)

2012年(4)

2011年(14)

2010年(55)

2009年(140)

我的朋友

分类: LINUX

2009-06-22 22:53:13

 
今天用 python 连接数据库的时候报错:Client does not support authentication protocol.
 
查了一下,原因是因为使用的mysql服务器版本中使用了新的密码验证机制,这需要客户端的版本要在4.0以上,原来的密码函数被改为old_password();这样使用password()生成的密码在旧的版本上的客户端就不好使了,而PYTHON 和 PHP中的MYSQL客户端都是3.23的(当然,mysqli的扩展除外),问题就在这了。
 
 
下面提供几种解决办法:

一 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;

三 Start mysqld with the --old-passwords option.

 

详细请参考mysql官方网站:http://dev.mysql.com/doc/refman/5.1/en/old-client.html

 

 

 

后续补充:

********************************************************************

因为之前安装 python 的 MySQLdb 模块是用低版本的 rpm 包来安装的,这样安装起来比较方便,但是由于版本较低,而mysql版本较高,所以出现上述问题,后来就使用稍高版本的 src包来安装,结果老是报错,快晕过去了,错误如下:

gcc -pthread -shared build/temp.linux-x86_64-2.3/_mysql.o -L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -o build/lib.linux-x86_64-2.3/_mysql.so /usr/bin/ld: /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC /usr/local/mysql/lib/mysql/libmysqlclient.a: could not read symbols: 错误的值 collect2: ld returned 1 exit status error: command 'gcc' failed with exit status 1

红色部分为错误提示,蓝色部分为解决方案。

可是问题来了,那个解决方法告诉我,说需要重新编译 mysql 才能解决这个问题 (recompile with -fPIC),/usr/local/mysql/lib/mysql/libmysqlclient.a 文件因为之前编译安装 mysql 的时候没有指定 -fPIC 参数,这个可是生产环境的服务器啊!!

于是把之前 mysql 的src包拿出来,重新解压:

HOST# tar -zxvf mysql-5.0.22.tar.gz
HOST# cd mysql-5.0.22
HOST# ./configure CFLAGS="-O3 -fPIC"
HOST# make
HOST# find . -name libmysqlclient.a
HOST# mv /usr/local/mysql/lib/mysql/libmysqlclient.a /usr/local/mysql/lib/mysql/libmysqlclient.a.bak
HOST# cp libmysqlclient.a /usr/local/mysql/lib/mysql/
 
这样编译就解决了这个问题,libmysqlclient.a 这个文件是 mysql 的客户端文件,重要性不是很高,所以可以使用重新编译的文件临时取代该文件。
 
OK,这样问题就解决了。
 


 

阅读(648) | 评论(0) | 转发(0) |
0

上一篇:OpenSSL 详细介绍

下一篇:mysql主从简明配置

给主人留下些什么吧!~~