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 OPTION; mysql>FLUSH RIVILEGES;
#第二句表示从mysql数据库的grant表中重新加载权限数据。因为MySQL把权限都放在了cache中,所以在做完更改后需要重新加载。
quit;
sudo /etc/init.d/mysql restart //重启mysql
3.在mysql授权表中查看授权是否成功
mysql> use information_schema //用户信息数据库
mysql> select * 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试试,说不定能解决问题.
订阅:
博文评论 (Atom)
没有评论:
发表评论