mysql作为常用的关系型数据库,密码修改后验证不通过是很多用户都会遇到的问题,这种情况会直接阻碍后续的数据库操作,需要掌握正确的处理方法来解决。
mysql密码修改的正确流程
正常的密码修改需要先登录mysql,然后执行对应的修改语句,不同的mysql版本语句略有差异。
已知原密码的修改方式
如果知道原密码,可以直接登录后执行修改语句,mysql 5.7及以上版本可以使用以下语句:
-- 切换到mysql系统库
USE mysql;
-- 修改指定用户的密码,这里以root用户为例
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
-- 刷新权限使修改生效
FLUSH PRIVILEGES;
如果是mysql 8.0及以上版本,PASSWORD函数已经被移除,需要使用如下语句:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; FLUSH PRIVILEGES;
忘记原密码的重置方式
如果忘记了原密码,需要先停止mysql服务,然后以跳过权限验证的方式启动服务,再执行密码修改操作:
# 停止mysql服务,不同系统命令可能有差异 systemctl stop mysqld # 跳过权限验证启动mysql mysqld_safe --skip-grant-tables & # 无密码登录mysql mysql -u root
登录后执行和已知原密码类似的修改语句即可,修改完成后重启mysql服务恢复正常启动模式。
密码修改后验证失败的常见原因
- 密码不符合复杂度要求:mysql默认有密码复杂度校验规则,如果新密码太简单会修改失败,导致验证不通过。
- 修改后没有刷新权限:执行修改语句后没有执行
FLUSH PRIVILEGES;,权限没有更新,验证时还是使用旧密码。 - 用户host匹配问题:修改密码时指定的用户host和实际登录的host不匹配,比如修改的是
root@localhost的密码,却用root@%的身份登录。 - 特殊字符转义问题:新密码中包含特殊字符,比如
<、>、&等,没有正确转义导致密码存储错误。
通过密码修改验证的技巧
处理密码复杂度问题
如果不需要密码复杂度校验,可以先关闭校验规则再修改密码:
-- 查看密码校验插件状态 SHOW VARIABLES LIKE 'validate_password%'; -- 关闭密码复杂度校验,不同版本变量名可能有差异 SET GLOBAL validate_password_policy=LOW; SET GLOBAL validate_password_length=4;
确保权限刷新生效
每次执行密码修改语句后,都要执行FLUSH PRIVILEGES;,如果是用UPDATE语句修改的密码,这一步是必须的,否则修改不会生效。
确认用户host匹配
修改密码前先查看用户的host信息:
SELECT User, Host FROM mysql.user WHERE User='root';
修改时指定对应的Host,比如查询到root用户的Host是%,就执行ALTER USER 'root'@'%' IDENTIFIED BY 'new_password';。
特殊字符密码的正确处理
如果新密码包含特殊字符,在sql语句中可以用单引号包裹,避免使用双引号,同时如果是在命令行执行,要注意shell的特殊字符转义,比如密码包含$符号,需要用反斜杠转义。
验证密码是否修改成功
修改完成后,可以退出当前登录,用新密码重新登录验证:
# 退出mysql exit; # 用新密码登录 mysql -u root -p
如果输入新密码后能正常登录,说明密码修改验证已经通过,后续可以正常使用数据库。