# MySQL8.0中如何重置密码？

- Link: https://www.xuepaijie.com/html/skill/devops/1157.html
- Published: 2018-06-25T13:15:52+08:00
- Author: Admin

可能很多人在MySQL 8.0中修改密码时遇到了很多问题，比如重置密码，还是用的旧的命令去
修改密码，导致报错，因为 MySQL 5.7.6 以后废弃了 user 表中的 password 字段和 password()
方法，所以使用旧的方法去重置密码对 mysql 8.0 是不行的。

首先我们先看几个功能，静默安装完成后 MySQL会给我们自动生成一个随机密码，

    ```html;
    grep 'temporary password' /var/log/mysqld.log
    ```

但因为自动的生成的密码有可能无法直接使用又不方便记忆，所以要修改密码，但修改密码
有几种方式。一种是利用生成的密码连上控制台然后跳过下面第一步免密码登录，执行修改
的命令来修改密码，另外就是利用免密码手段咯，大同小异。

免密码，首先要配置文件 MySQL 免密码登录，编辑 MySQL 的配置文件（这个得自己找到，
一般如下）：

    ```html;
    vim /etc/my.cnf
    ```

在 [mysqld]下加入一行：

    ```html;
    skip-grant-tables
    ```

保存并退出，执行

    ```html;
    service mysqld restart
    ```

重启 MySQL 服务后，即可免密码登录到 MySQL 上

    ```html;
    mysql -u root -p
    ```

提示输入密码时直接敲回车。进入控制台后，

    ```html;
    use mysql;
    select host, user, authentication_string, plugin from user;
    ```

选择 mysql 数据库并打印所有的用户信息，用户信息以一个表格显示，表格中有以下信息：

    ```html;
    host：允许用户登录的 ip ‘位置’ % 表示可以远程；
    user：当前数据库的用户名；
    authentication_string：用户密码（在mysql 5.7.9以后废弃了password字段和password()函数）；
    plugin：密码加密方式；
    ```

通过sql语句将默认的 root 密码置空

    ```html;
    use mysql;
    update user set authentication_string='' where user='root';
    ```

退出 mysql命令行后，删除 /etc/my.cnf 文件刚刚添加的 skip-grant-tables 并保存退出。
重启 MySQL 服务并重新登录到 MySQL 上，此时提示输入密码时直接敲回车，因为刚才已经
将密码置为空了。

利用 ALTER 修改 root 用户密码，比如 123456 为你设置的新密码，注意这个密码如果设置
的比较简单，例如 123456 等等，会设置不成功，它会提示你设置的密码太简单，最好设置
成大写字母、数字、符号的组合，这里只是举例。

    ```html;
    ALTER user 'root'@'localhost' IDENTIFIED BY '123456';
    ```

执行完之后会提示你 OK 的话，就代表修改成功了，至此重置密码也就算是完了，你可以使用
新设置的密码去登录试试。
