问题与背景
当遇到两个情况的时候会考虑到改mysql的密码,首先是内网使用的场景需要开放一个外网映射的端口,需要把密码改的尽可能复杂;或者是长时间不用,密码忘记了,需要重置一下密码的情况。
案例与方案
主要思路就是先改配置文件设置为无密码登录,然后进入数据库找到user表更新密码,然后退出,设置为有密码登录,然后重启数据库生效。
1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 。这一行配置让 mysqld 启动时不对密码进行验证
2、重启 mysqld 服务:systemctl restart mysqld
3、使用 root 用户登录到 mysql:mysql -u root
4、切换到mysql数据库,更新 user 表:
update user set authentication_string = password(‘root’), password_expired = ‘N’, password_last_changed = now() where user = ‘root’;
在之前的版本中,密码字段的字段名是 password,5.7版本改为了 authentication_string
5、退出 mysql,编辑 /etc/my.cnf 文件,删除 skip-grant-tables=1 的内容
6、重启 mysqld 服务,再用新密码登录即可
另外,MySQL 5.7 在初始安装后(CentOS7 操作系统)会生成随机初始密码,并在 /var/log/mysqld.log 中有记录,可以通过 cat 命令查看,找 password 关键字。找到密码后,在本机以初始密码登录,并且(也只能)通过 alter user ‘root’@‘localhost’ identified by ‘root’ 命令,修改 root 用户的密码为 root,然后退出,重新以root用户和刚设置的密码进行登录即可。