MySQL添加访问权限
Welkin Lv3

场景

系统:CentOS 7
服务器在(非正常)重启后,出现MySQL数据库无法访问错误

1
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

解决思路

此处没有去排查具体出错原因,尝试的修复方式是重置root密码并添加本地、远端访问权限。

Note:
出现问题后还是应该确认问题的根本原因的,MySQL官方文档中也列举了Access denied的原因,文末有相关链接

重置MySQL Root密码

  1. 编辑/etc/my.cnf文件,在文件最后添加如下内容,用于跳过MySQL登录检查
1
2
[mysqld]
skip-grant-tables
  1. 重启MySQL服务
1
sudo systemctl restart mysqld
  1. 进入MySQL并重置密码

使用mysql –uroot –p命令并直接回车,进行MySQL,重置密码并刷新

1
2
set password for 'root'@'localhost'=password('YourPassword');
flush privileges;

添加访问权限

添加本地、远程访问权限并刷新

1
2
3
grant all privileges on *.* to 'root'@'localhost';
grant all privileges on *.* to 'root'@'%' identified by 'YourPassword' with grant option;
flush privileges;

/etc/my.cnf文件中之前的修改注册掉,并重启MySQL服务

访问测试

本地访问

1
mysql -u root -p

远程访问

1
2
3
mysql -u {username} -p'{password}' \
-h {remote server ip or name} -P {port} \
-D {DB name}

密码设置中的问题

密码设置时,可能会提示如下错误,可以通过调整密码配置或者输入符合要求的密码

1
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

调整密码配置项

进入数据库后,用下述命令查询密码相关的配置参数

1
SHOW VARIABLES LIKE 'validate_password%';

得到类似如下的参数名及其值的列表

1
2
3
4
5
6
7
8
9
10
11
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 6 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | LOW |
| validate_password.special_char_count | 1 |
+--------------------------------------+-------+

通过set global NAME=VALUE形式的命令调整相应值即可,例如:

1
2
set validate_password.policy=LOW
set validate_password.length=6

Reference

MySQL Docs - Access denied
MySQL Docs - Troubleshooting Problems Connecting to MySQL
Your password does not satisfy the current policy requirements
Access mysql remote database from command line