Mysql 8.0+ 版本修改密码

记一次 Ubuntu 16.04 下修改 Mysql root 用户密码的过程, 期间遇到过很多问题, 这里只记录主要问题的解决

  1. 登录 mysql 时, 显示 ERROR 1045 (28000), 网上大部分教程都是在配置文件 my.cnf 中的 [mysqld] 下添加 skip-grant-tables 跳过密码验证, 但是我发现我的配置文件下没有该配置项 (原因未明), 于是直接采用命令 /usr/bin/mysqld_safe --skip-grant-tables 跳过验证
  2. 尝试直接登录时发生错误, mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists, 查询到的解决方法:
    • mkdir -p /var/run/mysqld
    • chown mysql:mysql /var/run/mysqld
  3. 直接登录成功, 开始修改密码 (过程中发现我没有升级数据库导致无法更改数据表, 只能退出使用 mysqld_upgrade 升级数据库)
    1. 刷新权限 flush privileges (开始修改密码时不允许修改, 刷新权限才能修改)
    2. 修改 root 用户密码
      • mysql> use mysql

        mysql1.png

      • select user,host,authentication_string from user; mysql 8.0+ 版本 password 字段更改了, 采用原来的 password = password("XXX") 语句会报语法错误

        mysql2.png

      • 修改密码 ALTER user '$User'@'$Host' identified by '$Password, $User$Host$Password 分别是要设的用户名、主机名、密码 (需要有数字、大小写字母和特殊符号构成), 注意 $Host 不一定是 localhost, 这个根据上面的查询结果决定, 否则会ALTER 失败, 所以这里的命令是 ALTER user 'root'@'%' identified by 'XXX'. 一定不要直接 update user set authentication_string="newpassword" where user="root", 因为 authentication_string 字段下只能是 mysql 加密后的 41 位字符串密码, 直接给赋值 newpassword 会发生错误

        mysql3.png

  4. 杀死 mysqld_safe 进程, 尝试重新登录.

你可能感兴趣的:(Mysql 8.0+ 版本修改密码)