在 Linux 下忘记 mysql root 密码的解决方法

󰃭 2016-08-02

跳过 mysql 服务的认证授权

无论 5.6 还是 5.7 都需要这一步

# 使用 service 停止服务
service mysql stop

# 或者 systemctl 停止服务
systemctl stop mysqld.service

# 命令行启动 mysql 跳过认证授权
mysqld_safe --skip-grant-tables &

# 客户端连接 mysql 服务
mysql -u root -p

Mysql5.7 找回 root 密码

注意

  • 新版的 mysql 数据库的 user 表中没有 Password 字段
  • 将加密后的用户密码存储于 authentication_string 字段

修改密码

mysql> update mysql.user set authentication_string=password('123') where user='root' and Host = 'localhost';
mysql> flush privileges;
mysql> quit

重启 mysql 服务

# 使用 service 重启服务
service mysql restart

# 或者使用 systemctl 重启服务
systemctl start mysqld.service

连接 mysql,alter user,完成找回密码

mysql> alter user 'root'@'localhost' identified by '123';

Mysql5.6 找回 root 密码

修改密码方法一

mysql> use mysql;
mysql> set password for 'root'@'localhost'=password('123');
mysql> flush privileges;
mysql> quit

修改密码方法二

mysql> use mysql;
mysql> update user set password=PASSWORD("123456") where user="root";
mysql> flush privileges;
mysql> quit

重启 mysql 服务,完成密码找回

# 使用 service 重启服务
service mysql restart

# 或者使用 systemctl 重启服务
systemctl start mysqld.service