温馨提示×

Debian MySQL如何重置密码

小樊
62
2026-07-02 06:47:25
栏目: 云计算

在 Debian 系统上重置 MySQL 密码,常见场景是忘记 root 密码。下面给你一套通用且安全的做法,适用于 MySQL 5.7 / 8.0(MariaDB 略有差异,文末会说明)。


一、先确认 MySQL 版本(很重要)

mysql --version
  • mysql Ver 8.0.x → 用 ALTER USER 方式
  • mysql Ver 5.7.x → 可以用 SET PASSWORD
  • MariaDB → 注意区别(文末说明)

二、重置 MySQL root 密码(忘记密码)

1️⃣ 停止 MySQL 服务

sudo systemctl stop mysql

2️⃣ 跳过权限表启动 MySQL

sudo mysqld_safe --skip-grant-tables --skip-networking &

✅ 说明

  • --skip-grant-tables:不验证用户权限
  • --skip-networking:禁止远程连接(更安全)

3️⃣ 免密码登录 MySQL

mysql -u root

4️⃣ 刷新权限(必须)

FLUSH PRIVILEGES;

5️⃣ 重置 root 密码

✅ MySQL 8.0

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';

✅ MySQL 5.7

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPassword123!');

⚠️ MySQL 8 中 PASSWORD() 已废弃,不能用


6️⃣ 退出并正常重启 MySQL

EXIT;
sudo killall mysqld
sudo systemctl start mysql

7️⃣ 验证新密码

mysql -u root -p

三、普通情况:记得原密码修改密码

如果你还能登录 MySQL

mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';

或(旧版本):

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPassword123!');

四、MariaDB(Debian 常见)

如果是 MariaDB(常见 Debian 默认):

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPassword123!');

或者:

ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('NewPassword123!');

五、常见问题

❌ ERROR 1396

ERROR 1396 (HY000): Operation ALTER USER failed

解决:

FLUSH PRIVILEGES;
SELECT user, host FROM mysql.user WHERE user='root';

确认 'root'@'localhost' 是否存在


❌ 无法启动 mysqld_safe

尝试:

sudo mysqld --skip-grant-tables --skip-networking &

六、安全建议(重要)

  • ✅ 密码建议包含大小写 + 数字 + 特殊字符
  • ✅ 不要暴露 skip-grant-tables 到公网
  • ✅ 生产环境禁用 root 远程登录

如果你愿意,可以把以下信息发我,我可以给出精确命令

  • Debian 版本
  • MySQL / MariaDB 版本
  • 报错信息(完整)

0