CentOS7安装MySQL8,以及过程中遇到的坑

闲来无事,打理服务器,自己的服务器总想弄点最新的东西试试,于是搞了Java11和MySQL8,但是MySQL8新版巨坑。

首先是按照这篇文章的方法部署,结果遇到了root用户密码丢失的情况
https://blog.csdn.net/managementandjava/article/details/80039650
报错 ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)

原因是mysql老语法在新数据库中的bug,在mysql8中,大量关于权限与用户的语法失效,会提示语法错误,然而最坑的是那种不会提示语法错误,可以执行,但是会引起用户数据丢失的语法。

比如说这种直接修改数据表的语句
update user set host=’%’ where user=‘root’;
update user set plugin=‘mysql_native_password’ where user=‘root’;
修改过后就会导致密码丢失,当然不仅仅是密码丢失,用户本身也会丢失,当你grant授权时,会提示你
ERROR 1410 (42000): You are not allowed to create a user with GRANT
因为grant时如果没有发现用户会自动创建,但是新版本中不支持了,但是你明明创建了用户,当你再次创建会提示创建失败,只能删掉重新创建。

此时产生了由update了user表产生的用户数据丢失,给出丢失密码的解决方案和我认为MySQL8想让你操作的方法。

MySQL8中重置密码的方法

同样因为语法问题,老方法不能用了,感谢这篇文章https://blog.csdn.net/managementandjava/article/details/80039650

vim /etc/my.cnf
在末尾加入 skip-grant-tables 后,不验证密码
然后
use mysql;
update user set authentication_string=” where user=’root’;
将 authentication_string置空
接下来就注释掉 /etc/my.cnf 文件里的 skip-grant-tables
service mysqld restart
mysql -uroot -p
不用输入密码直接按回车键
登录成功
ALTER user ‘root’@’%’ IDENTIFIED BY ‘Newpassword!’;
注意我这是 ‘root’@’%’
坑点在与之前是’root’@’localhost’ 修改的密码,后来
update user set host=’%’ where user=’root’;
改成了’root’@’%’ 退出后密码就不能登录了

MySQL8中正确的操作用户与授权方法

安装方法按开头引用的那篇文章,当进入数据库后,创建新用户,因为这样可以避免因root用户密码泄露导致的被删库留了勒索信息的事件发生
root只能本地访问,用户只能访问某些库,或者只能增加,修改,查询,不能创建用户或删除之类的。
首先先查看用户
select host,user,plugin from user;
在这里插入图片描述
#创建外网登录用户
%表示所有用户,localhost表示本地用户,也可写具体IP地址

create user 'username'@'%' identified by 'password';

#更改加密方式,mysql8引入了新特性 caching_sha2_password;老客户端不支持,改为mysql_native_password 方式;用update会导致用户丢失。要删掉重建。

ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; 

#授权
如果要外网访问所有库,就像root用户一样就这样写

grant all privileges on *.* to 'username'@'%';

授予某个库下所有表的权限

grant all privileges on onedatabase.* to 'username'@'%';

授予某个库下某个表的权限

grant all privileges on onedatabase.onetable to 'username'@'%';

授予某个库下某个表的读取权限

grant select on onedatabase.onetable to 'username'@'%';

总结,在MySQL8中,不要对user表进行任何update之类的操作,不然你会永远丢失你的用户

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值