CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

1. 背景

最近测试环境原本正常运行的mysql数据库突然登陆不了了,输入登录密码之后报错信息如下:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
根据错误码网上查询之后解决方案基本都是用户密码问题,有人修改密码之后问题解决了,可是有人按步骤修改密码之后还是报上面的错,很不幸,我便是后者中的一位。不啰嗦了,看正文吧!

2. 正文

2.1 用户密码问题

2.1.1 修改mysql的登录设置(登录时跳过权限检查)

vi /etc/my.cnf
在[mysqld] 下面添加一句:skip-grant-tables
添加成功后保存退出
注释:skip-grant-tables的作用是登陆时跳过权限检查

2.1.2 重启MySQL服务

service mysqld restart
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.1.3 修改用户密码

登陆数据库:mysql
修改对应用户的密码:UPDATE mysql.user SET password=PASSWORD(‘新密码’) WHERE user=‘root’;
刷新权限:FLUSH PRIVILEGES;
退出数据库:quit
相关截图如下:
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.1.4 恢复mysql的登录设置(恢复登录时的权限检查)

vi /etc/my.cnf
注释掉刚刚添加的行,在行首加#即可,如下所示:#skip-grant-tables
添加成功后保存退出
相关截图如下:
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.1.5 重启MySQL服务

service mysqld restart
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.1.6 登录验证

mysql -u root -p
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.1.7 登陆成功,恭喜你,说明问题已经解决;如果还是报错请不要着急,作者和你一样,尝试一下下一节的解决方案;

2.2 用户权限问题

2.2.1 修改mysql的登录设置(登录时跳过权限检查)

vi /etc/my.cnf
在[mysqld] 下面添加一句:skip-grant-tables
添加成功后保存退出
注释:skip-grant-tables的作用是登陆时跳过权限检查

2.2.2 重启MySQL服务

service mysqld restart
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.2.3 查询用户相关权限

登陆数据库:mysql
查看用户权限:SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;
退出数据库:quit
查询结果分析:从查询结果中可以看到root用户没有localhost的权限,虽然主机名叫localhost.localdomain(终于找到问题了,因为不指定主机名的情况下默认登陆的是localhost的,而root没有登录的权限,所以需要添加相关权限);问题已经发现,可是怎么添加权限呢?因为已经设置了登录时跳过权限检查,所以此时我们还是无法设置权限,怎么办呢?不要着急,我们可以指定已有的主机名登录之后设置一下嘛,继续:

此过程中相关截图如下:
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.2.4 恢复mysql的登录设置(恢复登录时的权限检查)

vi /etc/my.cnf
注释掉刚刚添加的行,在行首加#即可,如下所示:#skip-grant-tables
添加成功后保存退出
相关截图如下:
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.2.5 重启MySQL服务

service mysqld restart
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.2.6 指定主机名登录并设置相关权限

指定主机名登录:mysql -hlocalhost.localdomain -uroot -p密码
设置相关权限:
GRANT ALL ON . TO ‘root’@‘localhost’;
UPDATE mysql.user SET password=PASSWORD(‘密码’) WHERE user=‘root’;
刷新权限:FLUSH PRIVILEGES;
查看修改之后的权限:SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;
退出数据库:quit;
注释:登录密码需要注意一下,如果已经按照2.1.3节修改了密码,请使用新密码登录
相关截图如下:
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.2.7 重启数据库,验证一下

重启数据库:service mysqld restart
登录数据库:mysql -u root -p
CentOS6.5下MySQL ERROR 1045错误码解决方案(已验证)

2.2.8 登陆成功,恭喜你,说明问题已经解决;如果还是报错说明你的问题和小编的也不太一样,还请自行查询其他解决方案;