CentOS环境下MySQL 8.0重置登录密码

前言

安装MySQL后,忘记MySQL登录密码,遇到ERROR 1819,ERROR 1396等问题,此篇博客主要记录解决这些问题的过程。

步骤

  1. 设置MySQL为免密码登录
    vi /etc/my.cnf (部分Linux安装了vim,其命令则改为vim /etc/my.cnf)按【i】键进入编辑模式,在[mysqld]下面加上“skip-grant-tables”,按【Esc】键,然后输入“:wq”保存并退出vi。
    在这里插入图片描述

  2. 重新启动MySQL服务(使配置生效,此步骤不能省略)

    service mysqld restart
    

    在这里插入图片描述

  3. 清空旧密码
    3.1进入MySQL

    mysql -u root –p (无需输入密码,直接按回车键进入)
    

    3.2切换数据库

    use mysql
    

    3.3清空密码

    update user set authentication_string = '' where user = 'root';
    

    3.4退出

    quit
    

    在这里插入图片描述

  4. 删除免密码登录代码“skip-grant-tables”
    vi /etc/my.cnf,按【i】键进入编辑模式,删除[mysqld]下面的代码“skip-grant-tables”,按【Esc】键,然后输入“:wq”保存并退出vi。

  5. 退出MySQL

    exit
    
  6. 重设密码
    6.1【同2】重新启动MySQL服务(使配置生效,此步骤不能省略)

    service mysqld restart
    

    6.2进入MySQL

    mysql -u root –p (无需输入密码,直接按回车键进入)
    

    6.3切换数据库

    use mysql
    

    6.4修改密码

    ALTER USER 'root'@'%' IDENTIFIED BY 'snaiL_12';
    

    至此,大功告成,你可以通过新密码登录了。

关于报错问题如下:

1.1问题一

ALTER USER 'root'@'localhost' IDENTIFIED BY 'snaiL_123';

报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
在这里插入图片描述
1.2问题二

百度一番,得知是密码策略问题,默认长度为8位,于是,我将密码改为8位的:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'snaiL_123';

又报错:ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
在这里插入图片描述

报错问题解决

1.ERROR 1819 (HY000)解决:

1.1查看MySQL初始的密码策略

SHOW VARIABLES LIKE 'validate_password%';

在这里插入图片描述

1.2调整MySQL密码验证规则,修改 policy 和 length 的值。

set global validate_password.policy=0;(“0”等价于“LOW”,含义是只验证密码长度)
set global validate_password.length=8;(因为我之前动过密码长度,这里我将密码长度设为8)

在这里插入图片描述

2.ERROR 1396 (HY000)解决:

2.1查看root账户的host

select user,host from user;

在这里插入图片描述

2.2注意看,我的host是“%”,你输入的命令可能是:

ALTERUSER 'root'@'localhost' IDENTIFIED BY 'Snail@10'; 

将命令改成:

ALTER USER 'root'@'%' IDENTIFIED BY 'Snail@10'; 

问题解决!

### 如何在 CentOS重置 MySQL 8.0Root 用户密码 #### 停止并重启 MySQL 数据库服务 为了安全地更改 `root` 密码,需先停止当前运行的 MySQL 或 MariaDB 服务,并以跳过权限表的方式启动它。 ```bash sudo systemctl stop mysqld.service sudo mkdir /var/run/mysqld/ sudo chown mysql:mysql /var/run/mysqld/ sudo mysqld_safe --skip-grant-tables & ``` 上述命令会创建必要的目录结构来支持无授权模式下的 MySQL 运行[^1]。 #### 登录MySQL 并执行 SQL 查询语句 此时可以无需提供任何凭证就能连接至数据库服务器: ```sql mysql -u root ``` 一旦成功登录,则可继续操作以更新 `root` 账户的信息。首先切换到默认的安全配置文件所在的数据库: ```sql USE mysql; ``` 接着查询现有的认证方式以及散列后的密码字符串以便了解现状: ```sql SELECT Host, User, Authentication_String AS PasswordHash, Plugin FROM users WHERE User = 'root'; ``` 这一步骤有助于确认后续应采取的具体措施[^3]。 对于那些使用了插件验证机制而非传统哈希算法存储密码的情况,建议通过下面的方法将其改为更简单的形式——即移除现有密码后再重新设定新的强密钥组合: ```sql UPDATE user SET authentication_string = '' WHERE User = 'root'; FLUSH PRIVILEGES; ``` 此过程将清除掉旧有的身份验证数据,并立即生效这些变更[^5]。 最后按照标准流程为管理员角色指定一个新的高强度口令: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword!'; FLUSH PRIVILEGES; EXIT; ``` 这里替换了 `'YourStrongPassword!'` 成一个复杂度较高的实际值作为最终的目标状态[^2]。 #### 完成设置后恢复正常的服务运作 完成以上所有步骤之后,记得要正常关闭临时实例并将常规守护进程恢复在线: ```bash sudo pkill -9 mysqld sudo rm -rf /var/run/mysqld/* sudo systemctl start mysqld.service ``` 现在应该能够凭借刚刚定义的新凭据访问管理控制台了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值