导读:本期聚焦于追梦人创作的《如何设置MySQL初始root密码?root密码设置与修改方法详解》,敬请观看详情。MySQL装好之后root账号没密码,直接裸奔上线安全吗?首次配置root密码到底该用哪种方式才靠谱?本文围绕MySQL初始root密码的设置展开,分别讲解安装后通过mysql_secure_installation交互式加固、使用ALTER USER语句手动修改密码、利用skip-grant-tables跳过权限表重置遗忘密码这三种主流方案的完整操作步骤,同时说明caching_sha2_password与mysql_native_password认证插件对密码策略的影响,并附上密码复杂度查看与放宽的配置方法,帮助你在CentOS、Ubuntu等不同环境下顺利完成root密码初始化。

MySQL安装完成后,root账号默认处于无密码或使用临时密码的状态,这是很多服务器被入侵的常见入口。无论是通过yum源安装还是官方二进制包部署,第一次启动MySQL后都应该立即为root设置一个强密码。本文将从安装后的初始化配置、常规密码修改、忘记密码后的重置流程三个方面,详细讲解root密码的设置方法,并说明密码策略插件对设置过程的影响。

如何设置MySQL初始root密码?root密码设置与修改方法详解

一、安装完成后使用mysql_secure_installation初始化密码

这是官方推荐的首选方式。MySQL 5.7和8.0版本在通过包管理器安装并首次启动后,会在错误日志中生成一个root临时密码。临时密码的位置因系统而异:CentOS下通常在/var/log/mysqld.log,Ubuntu下则在/var/log/mysql/error.log。可以用grep命令快速找到它:

grep 'temporary password' /var/log/mysqld.log
# 输出类似:[Note] A temporary password is generated for root@localhost: xxxxxx

拿到临时密码后,先用它登录MySQL,此时执行任何操作都会提示密码过期,必须先修改密码。接着运行官方提供的加固脚本:

mysql_secure_installation

这个交互式脚本会依次引导你完成:设置新的root密码、删除匿名用户、禁止root远程登录、删除test数据库、重新加载权限表。如果是在本地开发环境想设置一个简单的密码(比如123456),往往会报错ERROR 1819 (HY000),这是因为MySQL默认启用了密码强度校验插件validate_password,它要求密码至少包含大小写字母、数字和特殊字符,长度不少于8位。可以先按规则设置一个复杂密码完成初始化,之后再按需调整策略。

二、使用ALTER USER语句手动设置或修改密码

除了交互式脚本,直接执行SQL语句修改密码更为灵活,也更适合写进自动化部署脚本。登录MySQL后,针对不同版本的语法略有差异。MySQL 5.7推荐使用ALTER USER

-- 登录后修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass@123';
FLUSH PRIVILEGES;

而MySQL 8.0开始默认认证插件换成了caching_sha2_password,如果客户端工具版本较老(比如旧版Navicat或PHP的mysqli扩展),连接时会报认证失败的错误。此时可以在设置密码的同时指定旧版认证插件:

ALTER USER 'root'@'localhost'
  IDENTIFIED WITH mysql_native_password BY 'NewPass@123';

注意引号必须使用英文单引号,密码中如果包含感叹号或特殊符号,在bash命令行下建议用双引号包裹整条语句,避免被shell解析。修改完成后执行FLUSH PRIVILEGES刷新权限,这一步在使用ALTER USER时其实可以省略,但为了保险起见加上也无妨。如果只是想让root支持远程访问,别忘了把host从localhost改为百分号,但要评估好安全风险,不建议生产环境直接对公网开放root账号。

三、忘记root密码后的重置方案

管理多台服务器时难免忘记root密码,此时需要借助--skip-grant-tables参数跳过权限验证。操作前先停止MySQL服务,然后以跳过权限表的方式启动:

# 停止服务
systemctl stop mysqld
# 跳过权限表启动,并禁用网络连接
mysqld_safe --skip-grant-tables --skip-networking &
# 免密登录
mysql -u root

登录后不能直接用ALTER USER,因为权限表被跳过时部分语句会报错,正确做法是先用FLUSH PRIVILEGES加载权限,再修改密码:

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass@123';
-- MySQL 5.7.6之前的旧版本可用:
-- SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPass@123');

修改完成后重启MySQL服务恢复正常模式即可。另一个更优雅的方式是在配置文件/etc/my.cnf[mysqld]段加入skip-grant-tables再重启,重置完务必删掉这行配置。整个过程中--skip-networking参数很重要,它防止重置期间有人通过网络趁虚而入。如果用的是Windows系统,则需要以管理员身份在命令行执行net stop mysql后,通过mysqld --skip-grant-tables启动。

四、密码策略的查看与调整

很多人设置密码失败,根源在于不了解当前的密码策略。可以通过下面的语句查看策略详情:

SHOW VARIABLES LIKE 'validate_password%';

返回结果中,validate_password.policy控制强度等级(0为低、1为中、2为强),validate_password.length规定最小长度。在开发或测试环境,可以适当放宽:

-- 放宽策略为低等级,最小长度改为6
SET GLOBAL validate_password.policy = 0;
SET GLOBAL validate_password.length = 6;

需要注意,SET GLOBAL的方式在MySQL重启后会失效,想永久生效要写入配置文件。而生产环境强烈建议保持默认的中级以上策略,并定期更换密码、限制root只能本机登录,配合防火墙规则才能构建完整的数据库安全防线。

MySQL初始root密码root密码设置MySQL密码修改修改时间:2026-09-05 07:04:29

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260905/50748.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。