最近测试环境要迁移到另一组服务器上,之前的数据库、代码等都要迁移。
mysql数据库被迁移到了新服务器后,迁移人员换了mysql密码,竟然没有告诉我们(甚至不知道应该找哪个人要密码);因此自己想了个办法,总算是能用旧密码登录了。
反正是测试服务器,领导都说随便搞了,所以没问题(还好不用删了mysql重装)。
Mysql是5.7.26版本的,网上的教程有的旧了,本文亲测可用。
直接修改root密码详细流程:
1.登录linux服务器,可以使用sudo的账号即可。
2.执行命令,修改mysql配置文件:
sudo vi /etc/my.cnf
打开后,找到[mysqld]中的#skip-grant-tables,然后把注释打开,大概在这个位置:
port = 3306
default_password_lifetime = 0
skip-grant-tables
然后wq保存并退出
3.执行命令,重启mysql,已经是安全模式了
sudo service mysql stop
sudo service mysql start
4.启动后,使用root用户进入mysql,如果提示输入密码,直接按回车即可(安全模式不需要密码,可以直接进)
mysql -u root -p
5.切换到名叫mysql的数据库,然后执行update命令,修改root的密码,如下;
注意,5.7.26版Mysql的密码字段不叫password,而是叫authentication_string:
use mysql
update user set authentication_string=password('#123456@') where user='root';
//刷新系统权限表
flush privileges;
这段代码将密码改为#123456@,password的意思是加密成密码串。
注意,安全模式下,下方修改用户密码的语句无法使用,会报错:
alter user root identified by '#123456@';
6.如果想让外部也能用这个账号密码登陆,那就把user表中的host字段改为%(root的host默认是localhost,表示只能在本机登陆)
update user set host='%' where user='root123';
一般还是insert个host为%的用户好一些。
7.现在root用户的密码就修改完毕了,再次改回my.cnf文件,注释skip-grant-tables:
port = 3306
default_password_lifetime = 0
#skip-grant-tables
然后重启mysql,大功告成:
sudo service mysql stop
sudo service mysql start
总结:
1.mysql的账号密码都存储在mysql.user中,mysql是数据库名,user是表名;表中有3个字段常用,user字段是用户名,authentication_string是加密后的密码,host是允许登录的ip。
2.user表中的密码字段是authentication_string,而不是password。(5.7.26版Mysql)
3.如果想在外部用账号密码访问mysql,可以在user表中新增一行,host设置为%,user设置为用户名,authentication_string是加密后的密码,其它字段参考其它行即可。