2013年4月14日星期日

php远程连接mysql的问题



我的代码涉及到mysql数据库部分的,返回结果都是error
Access denied for user ''@'localhost' 
网上查询结果是mysql远程连接需要授权,授权方法如下


1.取消本地监听 正常情况下,mysql占用的3306端口只是在IP 127.0.0.1上监听,拒绝了其他IP的访问。取消本地监听需要修改 my.cnf 文件: 
sudo vim /etc/mysql/my.cnf 
#找到如下内容,并注释
#bind-address = 127.0.0.1 

sudo /etc/init.d/mysql restart //重启mysql



2.授权
mysql
>GRANT ALL PRIVILEGES ON *.* TO <user>@"%" IDENTIFIED BY '<password>' WITH GRANT OPTIONmysql>FLUSH RIVILEGES
#第二句表示从mysql数据库的grant表中重新加载权限数据。因为MySQL把权限都放在了cache中,所以在做完更改后需要重新加载。 
quit
sudo /etc/init.d/mysql restart   //重启mysql



3.在mysql授权表中查看授权是否成功
mysql
> use information_schema  //用户信息数据库 
mysqlselect from user_privileges;  //用户授权表
#结果中GRANTEE="'user'@'localhost'" 对应的IS_GRANTABLE都是yes,说明授权成功.
再次运行代码,error变成了
Access denied for user 'abc'@'localhost' 
实际我连接数据库使用的用户名是 root.而 abc 是我的虚拟机账号.后来调查发现,php扩展库 mysql函数 相对我的 mysql数据库 太旧,每当php调用mysql函数连接mysql数据库的时候,mysql数据库会默认用ubuntu虚拟机的账号进行登录,导致登录连接失败.


查询server版本
mysql --version  //查看mysql版本
#我的mysql版本: 5.5.29-0ubuntu0.12.04.2 

php -v  //查看php版本
#我的php版本: 5.3.10-1ubuntu3.6

代码中用到 mysql扩展库 的地方更换为 mysqli扩展库,执行成功.


phpmyadmin 远程连接 mysql 时有同样的问题
#修改 phpmyadmin 的配置文件 : 
phpMyAdmin/config.inc.php 
#找到下面部分,将 mysql 改为 mysqli 
$cfg['Servers'][$i]['extension']     = 'mysqli'
phpmyadmin 连接成功.

版本问题不是所有人都会遇到,所有先搞定授权看看是否能解决问题,如果不能,更换php的mysql扩展库,使用mysqli试试,说不定能解决问题.

没有评论:

发表评论