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

    在配一个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,要知道,这俩系统差好多好多呢。坑爹。

转载于:https://my.oschina.net/u/873934/blog/495762

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值