mysql安装后配置root用户的安全密码

来源:这里教程网 时间:2026-02-28 20:43:12 作者:

MySQL 8.0+ 初始化后 root 密码为空?别直接
ALTER USER

MySQL 8.0 安装后首次启动,

root@localhost
用户默认没有密码,但可能被临时密码锁定(尤其使用
mysqld --initialize
方式初始化时)。此时直接连不上,或连接后执行命令报错
ERROR 1820 (HY000): You must reset your password

检查是否生成了临时密码:查看错误日志,路径通常是
/var/log/mysqld.log
/usr/local/mysql/data/*.err
,搜索
A temporary password is generated
用临时密码登录:
mysql -u root -p
,粘贴日志里的临时密码(注意末尾可能有空格)
登录后必须立即改密,否则多数操作被拒绝;不能用
SET PASSWORD
,要改用
ALTER USER
并指定密码策略

设置符合策略的 root 密码:绕过
validate_password
插件限制

MySQL 8.0 默认启用

validate_password
插件,要求密码至少 8 位、含大小写字母+数字+特殊字符。若只想设简单密码(如开发环境),得先关插件或调低策略。

登录后先查插件状态:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'validate%';
临时禁用(重启失效):
UNINSTALL COMPONENT 'file://component_validate_password';
(MySQL 8.0.29+)或
UNINSTALL PLUGIN validate_password;
若保留插件,调低强度:
SET GLOBAL validate_password.policy = LOW;
,再设密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';

允许远程 root 登录?先确认是否真需要

生产环境严禁开放

root@'%'
。如果只是本地开发机想让宿主机连 Docker 里的 MySQL,改
root@localhost
即可,无需开远程。

确认当前用户 host:
SELECT User, Host FROM mysql.user WHERE User = 'root';
若只要本机所有 IP 可连(非通配符),运行:
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'your_strong_password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;
改完刷新权限:
FLUSH PRIVILEGES;
确保 MySQL 配置没绑定
127.0.0.1
:检查
my.cnf
bind-address
0.0.0.0
还是注释掉

忘记临时密码且无法启动?跳过权限验证重置

仅限紧急情况。停 MySQL 后加

--skip-grant-tables
启动,会跳过权限检查,但此时所有用户免密可登录,且不能执行
CREATE USER
等 DDL —— 必须先
FLUSH PRIVILEGES
才能写入密码。

编辑服务配置或手动启动:
mysqld --skip-grant-tables --user=mysql &
另起终端连入:
mysql -u root
(不加
-p
执行:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
杀掉 mysqld 进程,正常重启服务

这个流程里最容易漏掉

FLUSH PRIVILEGES
,导致密码修改不生效;另外,
--skip-grant-tables
模式下
UPDATE mysql.user
会失败,必须用
ALTER USER

相关推荐