ubuntu环境下mysql8重置密码
问题:当 MySQL 以 --skip-grant-tables启动时,系统禁用权限验证,因此无法执行 ALTER USER这类需要权限检查的命令。
✅ 正确的密码重置步骤
步骤 1:确保 MySQL 运行在跳过权限模式
1 2 3 4 5
| # 停止 MySQL 服务 sudo systemctl stop mysql
# 以跳过权限模式启动 sudo mysqld_safe --skip-grant-tables --skip-networking &
|
步骤 2:无密码登录 MySQL
步骤 3:使用 UPDATE 语句重置密码(关键步骤)
在 mysql>提示符下执行:
1 2 3 4 5 6 7 8 9 10 11
| -- 选择系统数据库 USE mysql;
-- 清空 root 用户的认证字符串(相当于取消密码) UPDATE user SET authentication_string = '' WHERE user = 'root';
-- 刷新权限 FLUSH PRIVILEGES;
-- 退出 EXIT;
|
步骤 4:重启 MySQL 并设置新密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 停止跳过权限模式的进程 sudo pkill mysqld
# 正常启动 MySQL sudo systemctl start mysql
# 使用空密码登录 mysql -u root -p # 直接按回车(不输入密码)
-- 在 MySQL 中设置新密码 ALTER USER 'root'@'localhost' IDENTIFIED BY '508065'; FLUSH PRIVILEGES; QUIT;
|
步骤 5:验证新密码
1
| mysql -u root -p508065 -e "SELECT 1;"
|
💡 重要说明
- 不要在
--skip-grant-tables模式下使用 ALTER USER
- 必须先使用
UPDATE清空密码,退出特殊模式后再用 ALTER USER设置新密码
- 密码
508065强度较弱,建议在生产环境使用更复杂的密码
看到您遇到了 MySQL 密码策略限制的问题。错误代码 1819 表示您设置的密码 508065不符合当前的密码强度要求。以下是详细的解决方案:
🔧修改 MySQL弱密码
1. 首先查看当前的密码策略设置
1 2
| -- 查看所有密码验证相关变量 SHOW VARIABLES LIKE 'validate_password%';
|
这会显示类似下面的信息:
1 2 3 4 5 6 7 8 9 10 11
| +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | -- 最小长度要求 | validate_password.mixed_case_count | 1 | -- 需要大小写字母 | validate_password.number_count | 1 | -- 需要数字 | validate_password.policy | MEDIUM | -- 密码策略级别 | validate_password.special_char_count | 1 | -- 需要特殊字符 +--------------------------------------+--------+
|
2. 临时降低密码策略强度(推荐用于测试环境)
1 2 3 4 5
| -- 将策略设为 LOW(只检查长度) SET GLOBAL validate_password.policy = LOW;
-- 或者直接禁用密码验证(不推荐用于生产) SET GLOBAL validate_password.policy = 0;
|
3. 调整具体的密码要求
如果您想保持一定安全性但降低要求:
1 2 3 4 5 6 7 8 9 10 11
| -- 减少最小长度要求 SET GLOBAL validate_password.length = 6;
-- 减少特殊字符要求 SET GLOBAL validate_password.special_char_count = 0;
-- 减少数字要求 SET GLOBAL validate_password.number_count = 1;
-- 取消大小写字母要求 SET GLOBAL validate_password.mixed_case_count = 0;
|
4. 现在可以设置简单密码了
1
| ALTER USER 'root'@'localhost' IDENTIFIED BY '508065';
|
5. 永久修改配置(修改配置文件)
编辑 MySQL 配置文件:
1 2 3
| sudo nano /etc/my.cnf # 或 sudo nano /etc/mysql/my.cnf
|
在 [mysqld]部分添加:
1 2 3
| [mysqld] validate_password.policy=LOW validate_password.length=6
|
重启 MySQL 服务:
1
| sudo systemctl restart mysql
|
💡 密码策略级别说明
- LOW:只检查密码长度
- MEDIUM:检查长度、数字、大小写、特殊字符
- STRONG:在 MEDIUM 基础上增加字典检查
🛡️ 安全建议
虽然可以降低要求,但建议:
- 测试完成后恢复安全设置
- 生产环境保持 MEDIUM 或 STRONG 策略
- 使用密码管理器生成强密码
[up主专用,视频内嵌代码贴在这]