)
相信很多同学应该和我一样在使用 Linux 服务器 MySQL8.0 时常会遇到忘记 root 管理员密码的问题。MySQL8.0 自带高强度密码校验插件重置过程和 5.7 版本存在明显区别网上很多旧教程使用mysqld_safe命令在新版系统会直接提示命令不存在本文提供一套适配 systemd、无废弃命令、全程可复现的标准化重置流程同时解决重置时密码策略报错问题。一、分步重置操作流程步骤 1停止 MySQL 数据库服务MySQL 运行状态下无法跳过权限校验先执行停机命令systemctl stop mysqld执行完成后可输入systemctl status mysqld确认服务状态为 inactive。步骤 2后台启动无权限校验的 MySQL 进程新版 MySQL8.0 已移除mysqld_safe工具直接使用mysqld原生参数跳过权限表后台运行mysqld --skip-grant-tables --usermysql 参数解释--skip-grant-tables跳过账号密码校验免密登录数据库--usermysql使用系统内置 mysql 用户运行进程避免文件权限报错后台运行进程不占用当前终端。补充若提示mysqld: command not found执行find /usr -name mysqld查找程序绝对路径用完整路径执行命令。步骤 3免密登录 MySQL 客户端进程启动完成后直接执行登录命令无需账号密码mysql -uroot正常进入mysql命令行交互界面代表跳过权限模式启动成功。步骤 4刷新权限必做关键步骤跳过权限模式下系统未加载用户权限表直接修改密码会持续抛出 1819 密码策略报错必须先执行刷新权限语句sqlFLUSH PRIVILEGES;步骤 5修改 root 管理员密码两种方案任选方案 A设置符合 MySQL 默认策略的复杂密码推荐生产环境使用MySQL8.0 默认 MEDIUM 密码规则长度≥8 位包含大写字母、小写字母、数字、特殊符号四类中至少 3 类。 合规示例密码Niit1234执行修改语句sqlALTER USER rootlocalhost IDENTIFIED BY Niit1234;方案 B临时降低密码策略设置简单密码仅测试环境如果本地测试环境想使用123456、niit1234这类简单密码执行以下语句临时放宽校验规则sql-- 降低密码校验等级 SET GLOBAL validate_password.policy LOW; -- 修改最短密码长度为4位 SET GLOBAL validate_password.length 4; -- 取消大小写、特殊符号强制校验 SET GLOBAL validate_password.mixed_case_count 0; SET GLOBAL validate_password.number_count 0; SET GLOBAL validate_password.special_char_count 0; -- 执行简单密码修改 ALTER USER rootlocalhost IDENTIFIED BY niit1234;注意重启 MySQL 服务后密码策略会自动恢复严格模式仅当前会话生效。步骤 6退出数据库关闭临时 MySQL 进程密码修改完成后退出 mysql 客户端sqlexit;杀掉后台跳过权限校验的 mysqld 进程pkill mysqld步骤 7正常启动 MySQL 服务验证新密码登录启动标准 MySQL 服务systemctl start mysqld使用新密码登录验证mysql -uroot -p回车后输入刚才设置的密码能正常进入数据库即代表重置完成。补充如何查询mysql版本mysql --version如何查看当前系统密码规范SHOW VARIABLES LIKE validate_password%;