1. 背景

没有密码无法登录 MySQL

2. 原理

修改 MySQL 的配置文件 my.cnf,使得可以跳过授权表进入 MySQL,相当于免密码登录。因为所有的用户信息都存储在 mysql 库的 user 表中,所以只要找到 user 表中用户的密码字段,然后修改密码值即可。

3. 修改密码

3.1 开启免密登录

Linux 所有的配置文件默认都放在/etc目录,MySQL 的配置文件通常命名为my.cnf,当 /etc 目录中存在重复文件时,会自动重命名。

  • 跳过授权:skip-grant-tables
    1. vim /etc/my.cnf #vim 打开配置文件
    按 i 进入 vim 的插入模式,末尾追加 skip-grant-tables,按 esc 键返回一般模式,输入:wq保存并退出 my.cnf 文件。

配置文件更新要重启 MySQL 服务后,然后免密登录

  1. service mysqld restart #重启 MySQL
  2. mysql -u root -p #不用输入密码直接两次回车登录 MySQL

3.2 修改 user 表

5.6 版本 user 表中密码字段为 password,5.7 版本则为authentication_string。也可 select 查看一下具体字段。

  1. --打开数据库
  2. use mysql;
  3. --查看 root 用户的表字段
  4. select * from user where user = "root";
  5. --修改 root 用户密码
  6. update user set authentication_string = password("root1234") where user = "root";
  7. --刷新 MySQL 配置
  8. flush privileges;
  9. --退出 MySQL
  10. quit

3.3 退出免密登录

密码已经重新设置好,关闭免密登录就是去把配置文件中的 skip-grant-tables 删除

  1. vim /etc/my.cnf

找到 skip-grant-tables 所在行,vim 一般模式下按下 dd 删除当前行,:wq 保存退出 my.cnf,然后重启 MySQL ,新密码生效。

  1. service mysqld restart #重启 MySQL