Centos7下修改Mysql---8.0.16 root 密码(较完整系列)
个人环境
(1)Centos 7.0
(2)MySQL 8.0.16
问题产生背景:安装完mqsql 8.0.16 版本后,我清楚记得我将密码改为了我的常用密码,然而今日兴致来了,准备登陆上去学习一会,却死活登录不上去,于是决定修改密码,各位行内大哥的资料翻了个遍,确实说的都对,但偏偏我遇到的问题奇葩,死活解决不来,折腾了3个小时,终于,我赢了。我会在以下步骤中写出我具体的想说的一些话。
1.修改mysql配置文件
编辑配置文件
vim /etc/my.cnf
按a或i 进去编辑模式,在[mysqld]中添加skip-grant-tables
按esc后输入:wq保存退出(如果无法退出,在wq后面加!强制退出)注:添加这行命令作用是在登录的时候,无需密码可直接登录。
2.重启mysql
输入命令重启
service mysqld restart(centos6)
systemctl restart mysqld (centos7)
3.登录mysql
mysql -u root -p
4. 修改mysql的root密码
选择mysql数据库
use mysql;
修改root密码 (密码有一定的要求,我在最后会阐述)
update user set authentication_string=password(‘你的密码’) where user=‘root’;(各位在输入mysql语句时候,记得这个 ;)
注:5.6以前的版本可以用PASSWORD()
5.7以后的版本可以用authentication_string()
刷新权限
flush privileges;
退出mysql
quit
5. 修改/etc/my.cnf 删除skip-grant-tables
6.重启mysql
7. 再次登录mysql,成功
密码要求:
1.至少8位
2.至少包含1位特殊字符
3.至少包含大小写混合
4.至少1位数字
以上是常规解决修改密码问题的办法,很明显这么简单的问题,几分钟搞定,我怎么可能弄三个小时,来看看我的奇葩问题:
看到了吧,当我使用第四步修改密码时,报错1064:说我的语法有问题,接着我使用:alter user ‘root’@‘localhost’ identified by ‘xxxxxxxx’; 来修改密码,它又报错1290:说我正在使用skip-grant-tables跳过权限免密登录,不能修改。于是我就头大了两个小时。
对于1064的错误,起初我进去 help想找找线索,然而并没有收获。接着我就在网上找了找资料,最终结论是可能使用了mysql保留字,我对于这个保留字不太了解,资料中也显示出了所有保留字,我这暴脾气哪有耐心看我有没有用,直接将’ '改为``,(注:当使用了mysql保留字,需要用反引号将其引起来,也就是键盘数字1左边的键),事实证明,我并没有使用保留字。
俗话说,真理就是你错误99次后,那最后一份坚持。(我说的,( ̄▽ ̄)")
于是,我好好想了想,第一种方法有语法错误,第二种来修改密码,说我是使用 skip-grant-tables,免密登录无法修改,那么能不能不用这句命令,达到免密的效果呢,功夫不负有心人,我找到了办法:
1.首先查看当前root用户相关信息,在mysql数据库的user表中;(在使用skip-grant-tables先进行免密登录)
select host, user, authentication_string, plugin from user;
其中:
host: 允许用户登录的ip‘位置’%表示可以远程;
user:当前数据库的用户名;
authentication_string: 用户密码;
plugin: 密码加密方式;
2.可以看到:当前root用户authentication_string字段下有内容,先将其设置为空;
use mysql;
update user set authentication_string=’’ where user=‘root’;
竟然修改成功了,那么证明我的思路得到了证实,问题也就迎刃而解了。
3.注销掉/etc/my.cnf 中的skip-grant-tables,并重启mysql
4.依旧可以免密登录,然后使用alter user ‘root’@‘localhost’ identified by ‘xxxxxxxx’; 进行密码修改。
至此修改成功; 从新使用用户名密码登录即可;
总结一下:遇到问题,请根据错误提示找答案,想一想解决的思路,当你成功解决的时候,你会开心一天的,相信我!另外,注意修改的时候的单词拼写,这些低级错误,往往是修炼你注意细节的功底。
最后,各位大哥,如果还有好的解决方法,可以分享出来,供大家使用!