MySQL 8.0 及以上版本首次安装后,默认不会生成 root 密码,而是采用临时密码机制或空密码(取决于安装方式),但必须立即完成安全初始化,否则数据库存在严重安全隐患。
查看并使用临时密码(适用于 RPM/DEB 官方包安装)
安装完成后,MySQL 会自动生成一个临时 root 密码,记录在错误日志中:
Linux 默认日志路径通常为/var/log/mysqld.log或
/var/log/mysql/error.log执行命令查找:
sudo grep 'temporary password' /var/log/mysqld.log输出类似:
A temporary password is generated for root@localhost: aB3#xY9!mQ2,后面一串即为临时密码 用该密码登录:
mysql -u root -p,然后粘贴临时密码
运行 mysql\_secure\_installation 完成安全初始化
登录成功后,**必须立即执行安全加固脚本**(即使刚装完也需运行):
终端输入:mysql_secure_installation按提示操作:设置新 root 密码(建议强密码,含大小写字母+数字+符号)、删除匿名用户、禁止 root 远程登录、移除 test 数据库、重载权限表 MySQL 8.0+ 默认启用密码强度校验插件(validate_password),若提示密码太简单,可先设较复杂密码,后续再调整策略
手动修改 root 密码(适用于跳过临时密码或忘记时)
若无法获取临时密码(如 Docker 启动、二进制免编译安装),可跳过授权表启动并重置:
停止 MySQL:sudo systemctl stop mysqld(或
mysqld_safe --skip-grant-tables &) 以跳过权限验证方式启动:
sudo mysqld --skip-grant-tables --skip-networking &另开终端登录:
mysql -u root(此时无需密码) 执行重置(MySQL 8.0+ 语法):
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourNewPass123!';重启正常服务:
sudo systemctl restart mysqld
确认安全状态与基础防护
初始化完成后,建议快速验证并加固:
检查 root 是否仅允许本地登录:SELECT host,user FROM mysql.user WHERE user='root';—— 正常应只显示
localhost禁用远程 root 登录(除非必要):
DELETE FROM mysql.user WHERE user='root' AND host!='localhost'; FLUSH PRIVILEGES;创建专用管理账户(非 root):
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'StrongPass456!'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;定期更新 MySQL 版本,避免已知漏洞
