最稳妥方式是用 mysqld_safe --skip-grant-tables --skip-networking 启动,清空 authentication_string 后必须执行 alter user 设置新密码并 flush privileges,否则登录仍失败。

直接用 mysqld_safe --skip-grant-tables 启动最稳妥
别去改 /etc/my.cnf,改完忘了删、服务起不来、权限错乱都是常见事故。直接命令行启动更可控,也避免配置残留风险。
执行前先确认 MySQL 已停:systemctl stop mysqld,再用以下命令启动:
-
mysqld_safe --skip-grant-tables --skip-networking &(推荐,自动处理 pid 和日志路径) - 如果
mysqld_safe找不到,用/usr/sbin/mysqld --skip-grant-tables --skip-networking &,但得手动指定--user=mysql,否则可能因权限失败 -
--skip-networking必加——防止远程未授权访问,本地 socket 连接仍可用
UPDATE user SET authentication_string = '' 是最简清空方式
MySQL 5.7 的密码字段是 authentication_string,不是 password;也不能用 PASSWORD() 函数(已弃用),更不能设成 NULL。
- 登录后先
USE mysql; - 执行
UPDATE user SET authentication_string = '' WHERE user = 'root' AND host = 'localhost'; - 加
AND host = 'localhost'避免误改其他 root 权限行(比如'root'@'%') - 不需要
FLUSH PRIVILEGES立即生效——UPDATE直接写表,但后续设新密码时必须执行
设新密码必须用 ALTER USER,不能只靠 UPDATE
清空 authentication_string 后,mysql -u root 能进,但此时 root 认证插件仍是 caching_sha2_password(5.7.21+ 默认),直接 UPDATE 字段设值会失效或报错。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 进 MySQL 后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_pass'; - 如果提示
ERROR 1819 (HY000)密码强度不足,先临时关掉:SET GLOBAL validate_password.length = 4; - 设完立刻
FLUSH PRIVILEGES;,否则新密码不生效 - 退出后必须杀掉旧进程:
pkill mysqld或killall mysqld,再systemctl start mysqld
重启后连不上?大概率是 host 匹配错了
MySQL 5.7 默认只允许 'root'@'localhost',而你用 mysql -u root -p 实际走的是 socket 连接,对应 localhost;但如果用 127.0.0.1 就走 TCP,匹配的是 'root'@'127.0.0.1' 或 'root'@'%',后者通常没开。
- 检查当前生效的 root 行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; - 如果只有
'root'@'localhost',就别用-h 127.0.0.1连 - 需要远程访问才额外加:
CREATE USER 'root'@'%' IDENTIFIED BY 'pass'; GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
实际操作里最容易卡在「以为密码清空了就能直接设新密码」,其实中间必须过一次 ALTER USER 触发认证插件重载。跳过这步,新密码看着设成功了,但下次登录还是被拒。










