您的位置:首页 > 其它

1045 access denied…… 错误的解决方法

2015-08-22 00:00 225 查看
在配一个web服务器的时候,遇到了

1045 access denied for user 'root'@'localhost' using password yes

错误,下面说一下我的解决办法。

centos6.6,mysql5.1,web环境全部是yum安装。

装完web环境后,远程navicat连接报1130错误,这是肯定的,mysql默认不允许远程连接,所以修改mysql表中host字段为%,默认密码为空,登录的时候回车就行了:

mysql -u root -p
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>flush privileges;
mysql>select host, user from user;

修改完以后,从本地navicat可以登录了,然后把数据库导入服务器中,并把web程序上传到服务器的web目录下。

当打开web的时候,会出现1045 access denied for user 'root'@'localhost' using password yes错误,开始我以为是web里面的数据库密码错了,但不是,而且远程myslq可以连接啊,这是怎么回事。难道是默认密码不能为空?也不对,因为外部可以访问mysql。从网上百度了方法,也是修改密码而已。

# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysql restart
# mysql -uroot -p
Enter password: <输入新设的密码newpassword>
mysql>

改完密码,还是不行,外部重设密码以后依然能访问,本地还是不能访问,为这个问题,弄了好几个小时,晚上8点了,一生气,不弄了,走人。第二天(周六)加班弄这个(5分钟搞定了)。



上面有三个用户(默认5个,还有两个匿名用户,安全起见我删掉了,对本教程无影响),这是我修改完以后表,修改前是这个样子的,我就不改回去了,写写能明白就行了:

localhost root

主机名字 root

127.0.0.1 root

前面说过,刚装完以后远程连接报1130,所以把用sql语句改成了把host改成了%,就是因为这个,粗心大意,这个语句只把第一个root改成了%,变成这样:

% root

主机名字 root

127.0.0.1 root

按理说应该%号了,应该本地、远程都连接才对啊,不知道为什么不行,可能是mysql版本原因。所以要把前面的连接地址加一个本地的localhost(有人说了,你不是有一个127.0.0.1吗,更坑爹,在web代码里面写127.0.0.1或机子的ip之后,直接cann't connect…………,直接不能连接,抽时间想想为什么这样写不行)。

下面具体步骤,按上面的方式,进安全模式,改回默认的host,此时本地可以连接了,然后退出,重启mysql服务,正常进入mysql,把host改成%,此时不要退出mysql命令行,远程navicat连接mysql,把host改成一个%和一个localhost,点下面的保存按钮:

此时,回到mysql命令行(如果已经退出mysql命令行,就从头开始吧),刷新权限:flush privileges;

重新打开web程序,激动人心的时刻到了,可以看到程序正常运行了。

怀疑这个问题是这个mysql版本的问题。

最后建议,开发环境和生产环境最好还是一模一样的好,我本地的是php5.4.3,mysql5.6的,服务器是php5.3,mysql5.1,差好多呢。本来运维说是给一个centos7,我装了一个本地虚拟机测试没问题,等部署的时候,竟然是centos6.6,要知道,这俩系统差好多好多呢。坑爹。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: