Linux版本:CentOS7
Mysql版本:5.7.26
登录失败&修改密码
起因是我最近在学习Linux,今天刚好学到了安装webmin。webmin上输入mysql的账号和密码后就可以控制Linux服务器上的mysql数据库。但我今天试的时候并不能成功登陆上去,给我报了账号和密码错误。然后我打开navicat想试试能不能连上去,因为之前通过navicat连接成功过数据库,还在navicat上保存了账号和密码,所以账号和密码是不可能有问题。
我就通过以下的报错在网上搜:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
搜出来的都是以下操作方法:
vim /etc/my.cnf # 打开配置文件 然后在[mysqld]下方插入以下一句话
skip-grant-tables # 这句话的意思是跳过登录
# 然后保存退出
systemctl restart mysqld # 重启mysql服务
mysql -u root -p
# 此时不用输入密码 直接回车就可进入
use mysql; # 切换数据库
update user set authentication_string=password("123456") where user='root';
这样操作之后,mysql给我的提示信息是:
Query OK, 0 rows affected, 1 warning (0.00 sec)
意思就是我没有修改成功,然后我通过:
select user,host from user;
查询出来发现我根本没有root用户orz
接下来就需要新增root用户
新增root用户
create user 'root'@'localhost' identified by '123456';
如果此步骤报以下错误:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
则运行:(不报错的就跳过)
flush privileges;
再次运行:
create user 'root'@'localhost' identified by '123456';
如果还报错,则运行:(不报错的就跳过)
drop user 'root'@'localhost';
再再次运行:(应该是不会报错了,报错当我没说)
create user 'root'@'localhost' identified by '123456';
然后赋予root用户权限:
grant all privileges on *.* to 'root'@'localhost' with grant option;
flush privileges;
exit;
然后将/etc/my.cnf中跳过权限的那句话注释掉:
vim /etc/my.cnf
#skip-grant-tables
# 保存并退出
systemctl restart mysqld # 重启mysql服务
# 再次尝试登录
mysql -u root -p
# 输入刚刚重新设置的密码 即可登录成功
如果要赋予root用户远程登录的权限,可以进行如下操作:
# 首先需要登录到mysql
user mysql; # 切换数据库
update user set host='%' where user='root'; # 允许root用户远程登录
flush privileges; # 刷新权限
修改密码策略
当我们想设置简单的密码的时候,看了别人发的如何修改安全策略的代码,如下:
set global validate_password_policy=0;
set global validate_password_length=1;
但是却报了如下错误:
ERROR 1193 (HY000): Unknown system variable ‘validate_password_policy‘
解决办法:
vim /etc/my.cnf # 打开配置文件
# 在[mysqld]下方加入以下两句话
plugin-load-add=validate_password.so # 插件的加载方法,每次服务器启动时都必须给出该选项
validate-password=FORCE_PLUS_PERMANENT # validate-password在服务器启动时使用该选项来控制插件的激活
# 保存并退出后
systemctl restart mysqld # 重启mysql服务
mysql -u root -p # 登录到mysql
SHOW VARIABLES LIKE 'validate_password%'; # 查看安全策略
set global validate_password_policy=0; # 再次尝试修改
# 有可能这次不报错,但是查看安全策略后还是没有修改成功。可以试试运行这条命令:
set global validate_password_policy=LOW;
参考资料:
1.MySQL修改安全策略时报错:ERROR 1193 (HY000): Unknown system variable ‘validate_password_policy‘的解决方法
2.MySql解决mysql没有root用户问题
3.ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost‘