在 Debian 系统上重置 MySQL 密码,常见场景是忘记 root 密码。下面给你一套通用且安全的做法,适用于 MySQL 5.7 / 8.0(MariaDB 略有差异,文末会说明)。
mysql --version
mysql Ver 8.0.x → 用 ALTER USER 方式mysql Ver 5.7.x → 可以用 SET PASSWORDMariaDB → 注意区别(文末说明)sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables --skip-networking &
✅ 说明
--skip-grant-tables:不验证用户权限--skip-networking:禁止远程连接(更安全)
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPassword123!');
⚠️ MySQL 8 中
PASSWORD()已废弃,不能用
EXIT;
sudo killall mysqld
sudo systemctl start mysql
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 默认):
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPassword123!');
或者:
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('NewPassword123!');
ERROR 1396 (HY000): Operation ALTER USER failed
解决:
FLUSH PRIVILEGES;
SELECT user, host FROM mysql.user WHERE user='root';
确认 'root'@'localhost' 是否存在
尝试:
sudo mysqld --skip-grant-tables --skip-networking &
skip-grant-tables 到公网如果你愿意,可以把以下信息发我,我可以给出精确命令: