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

    在配一个web服务器的时候,遇到了 php

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

错误,下面说一下个人解决办法。 web

    centos6.6,mysql5.1,web环境所有是yum安装。 sql

    装完web环境后,远程navicat链接报1130错误,这是确定的,mysql默认不容许远程链接,因此修改mysql表中host字段为%,默认密码为空,登陆的时候回车就好了: shell

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。从网上百度了方法,也是修改密码而已。 centos

# /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,要知道,这俩系统差好多好多呢。坑爹。

相关文章
相关标签/搜索