MySQL8.0安装后不能正常使用的经历以及解决办法

装了个MySQL给自己的阿里云服务器,毕竟钱不能白花要提高自己Linux上的经验,要多折腾实践蹂躏(实际上操作过程中是我被蹂躏的一方)一下才行。

(1)阶段1:登录不了MySQL

首先MySQL安装完成,我装的是MySQL最近版本8.0有最新的用最新的了。发现了一个问题就是我设置不了密码也登录不进去,报错ERROR 1045 (28000),搜了网上的一个帖子在my.cnf
上添加一个skip-grant-tables就可以使用MySQL了,结果没想到这才问题的刚刚开始。

[root@localhost bin]# mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

添加完新的属性,能使用MySQL但是发现设置不了密码,几乎是随便输根本不校验就进去,如果是一个项目很多人都能接触到,这样就很危险,谁都能进去瞎玩(在之前银行维护项目中,数据库这部分专门分了一个分组group,设置了很多用户一级一级的权限)。

(2)阶段2:不用校验密码也能随便登陆

觉得这个问题要解决,不能将就。首先想到的问题是我设置一下mysql.user密码,给他一个确定的密码他也许就不会不校验密码直接登录MySQL。于是就查询mysql用户信息

select * from mysql.user;

发现第一个问题就是没有看到密码password这一项(看图片上半部分),实际上密码对应的字段就是authentication_string(这应该是5.7以及5.7以后版本都会这样对应)
第二个问题发现这个字段面线是加密过的,怎样把自己的密码加密呢,这一要用到一个password()函数对密码进行加密
在这里插入图片描述

(3)阶段3 修改密码语法报错

于是执行修改密码操作

update mysql.user set authentication_string=password('123456') where user='root';

然而发现报错,更新不了密码,提示语法有问题,查了一下别的帖子发现人家也都是这么用的,从语法上看没看出什么问题

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('root') where user='root'' at line 1

最终发现一个帖子mysql5.7更改密码应该采用命令ALTER USER ‘root’@'localhost’IDENTIFIED BY ‘XXXXXX’ ,而且MySQL的密码设置是有要求的,

MySQL 设置的密码中必须至少包含一个大写字母、一个小写字母、一个特殊符号、一个数字,密码长度至少为8个字符

。 所以你设置密码也最好不要弄个123456之类的密码,按照要求来设置,否则还会报错的而且错误提示也不够直接能看出问题。

(4)新错误说你不能执行更改密码

按照上面的alter语句以及符合密码要求的密码,输入到mysql命令行,出现新的报错

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

这是我们之前设置的my.cnf引起的,但是你去掉并重启mysql生效你会发现,跟第一阶段一样登录不进去,
这时候还是搜索问题发现可能是要刷新权限
stackoverflow上的相关问题,注意第二个回答,第一个鬼知道为什么会被accept
解决方法:执行下面语句,成功后再ALTER USER ‘root’@'localhost’IDENTIFIED BY ‘XXXXXX’ 即可

扫描二维码关注公众号,回复: 5650134 查看本文章
flush privileges;

这时候就很正常了,就像你之前是用别人配置好的MySQL那样了。

猜你喜欢

转载自blog.csdn.net/FeiChangWuRao/article/details/86158852
今日推荐