在开发或者运维等场景中,或者服务器安装好了很久未使用,总之种种原因MySQL密码忘记了。这个时候需要重置MySQL的密码,其实这个并不难,下面说一下实现思路和方案。

    这里以Linux为例进行说明重置密码要分两个步骤:

1、登陆到MySQL命令行界面

2、使用SQL指令修改密码

按照这两部操作就好了,可能我们有疑惑:密码都忘记了怎么登陆到命令行界面呢?其实这个在启动MySQL的时候跳过密码认证就可以了。首先要停止MySQL服务,这个和安装MySQL的方式有关,大致三种方式可以停止:

1、使用 service 停止:service mysqld stop
2、使用 mysqld 停止:/etc/inint.d/mysqld stop (注意mysqld的路径需要和安装时的一致,根据实际情况执行对应命令)
3、使用mysqladmin停止:mysqladmin shutdown

如果无法停止可以使用kill命令杀掉mysql进程

然后启动,这个很关键了虽然MySQL可能可以通过service mysqld start或者/etc/init.d/mysql start启动但是不能这样做,应该在MySQL的安装目录下找到safe_mysqld然后使用

mysqld_safe --skip-grant-tables &

注意可能需要mysqld_safe的全路径,这样启动后就可以使用空密码登陆MySQL了。

第二步就是修改密码了,其实就是修改数据表,因为MySQL的用户和密码存储在数据表中。存储在数据库名为mysql的数据库中的user表中,至于密码字段这个和MySQL版本有关了如果是MySQL5.7之前的版本,密码存储在Password字段如果是MySQL5.7及之后的版本密码存储在authentication_string字段中,另外几个相关字段为:Host(主机)、User(用户名)两个字段,下面给出MySQL5.6及以前版本和MySQL5.7及之后的版本的更新密码SQL,使用root和空密码登录MySQL命令行界面后使用

use mysql;
#MySQL5.6及之前版本修改密码
update user set Password=password('新密码') where User='root';
#MySQL5.7之后及8.0之前版本修改密码
update user set authentication_string=password('新密码') where User='root';   
flush privileges;
#MySQL8.0及之后版本修改密码
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
#修改密码之后需要再次执行flush privileges;

重启MySQL即可生效!

另外补充一点mysql初始化的命令,如果因为某些原因表损坏等需要初始化mysql数据库可以使用

/usr/local/mysql/scripts/mysql_install_db \
--defaults-file=/etc/my.cnf --datadir=/usr/local/mysql/data \
--basedir=/user/local/mysql --user=mysql

以上命令假设mysql安装在/usr/local/mysql目录下以mysql用户身份启动,请对号入座。