mysql安装完成后如何设置root密码_mysql用户安全配置

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

MySQL 8.0+ 初始化后 root 密码为空?用
mysql_secure_installation
不起作用

MySQL 8.0+ 安装后默认使用

caching_sha2_password
插件,且 root 用户可能被设为
auth_socket
或空密码(取决于安装方式)。直接执行
mysql -u root -p
常报
Access denied
,不是密码错了,而是认证方式不匹配。

Debian/Ubuntu 的
apt install mysql-server
默认禁用密码登录,root 绑定
auth_socket
,此时
mysql_secure_installation
会跳过密码设置
CentOS/RHEL 的
yum/dnf install mysql-server
可能生成临时密码,记录在
/var/log/mysqld.log
中,关键词是
A temporary password is generated
若已用
mysql_secure_installation
却没改密码,大概率是因为它检测到 root 已有认证方式(如 socket),就跳过了密码步骤

绕过验证重置 root 密码:停服务 +
--skip-grant-tables

这是最可靠、跨平台的兜底方法,适用于所有 MySQL 版本,但需有服务器 root 权限。

先停服务:
sudo systemctl stop mysql
(或
mysqld
,依系统而定)
手动启动 mysqld 并跳过权限检查:
sudo mysqld --skip-grant-tables --skip-networking &
--skip-networking
防止远程未授权访问)
另开终端连入:
mysql -u root
(此时无需密码)
刷新权限并重设密码(注意语法):
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '你的强密码';
退出,杀掉 mysqld 进程,再用
systemctl start mysql
正常启服务

设置完成后必须改的三个安全项

仅设密码远远不够。MySQL 默认配置对生产环境极不友好,以下三项不改,等于裸奔。

bind_address
:检查
/etc/mysql/mysql.conf.d/mysqld.cnf
(Ubuntu)或
/etc/my.cnf
(CentOS),确保
bind_address = 127.0.0.1
,禁止监听公网(
0.0.0.0
是高危配置)
删除匿名用户:
DROP USER ''@'localhost';
限制 root 登录范围:
RENAME USER 'root'@'%' TO 'root'@'127.0.0.1';
(避免 root 能从任意 IP 登录;如需远程管理,应新建专用用户并限制 IP 和权限)

验证是否真生效:用新密码连、检查插件、查 host

别只信自己敲了命令。实际连一次,看底层到底认不认。

执行:
mysql -u root -p -h 127.0.0.1
(强制走 TCP,避开 socket 认证歧义)
成功登录后查:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
—— 确认
plugin
caching_sha2_password
(非
auth_socket
),且
host
127.0.0.1
localhost
再试:
mysql -u root -p -h localhost
—— 若失败但上一条成功,说明
localhost
走的是 socket,需额外运行
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '密码';
MySQL 的 root 安全配置本质是三件事:密码强度、认证插件统一、网络暴露面最小化。很多人卡在第一步就以为搞定了,结果
host
字段残留
%
,或者
plugin
没切过去,导致应用连不上或安全策略形同虚设。

相关推荐