mysql重置密码及设置密码

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

1
mysql -u root

步骤 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 基础上增加字典检查

🛡️ 安全建议

虽然可以降低要求,但建议:

  1. 测试完成后恢复安全设置
  2. 生产环境保持 MEDIUM 或 STRONG 策略
  3. 使用密码管理器生成强密码
[up主专用,视频内嵌代码贴在这]