mysql安装后如何配置root密码_mysql安全配置方法

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

刚装完 MySQL,root 密码是空的还是随机生成的?

取决于你的安装方式和 MySQL 版本。MySQL 5.7+ 官方二进制包或 RPM/DEB 安装后,

mysqld
会自动生成一个临时 root 密码,记录在错误日志里;而某些一键脚本(如 Ubuntu 的
apt install mysql-server
)可能跳过这步,导致 root 密码为空。别猜,直接查:

查临时密码:
sudo grep 'temporary password' /var/log/mysqld.log
(Linux)或
sudo grep 'temporary password' /usr/local/mysql/data/*.err
(macOS)
若没找到且能无密码登录:
mysql -u root -p
回车即可进,说明密码为空
若提示
Access denied
但你确定没设过密码,大概率是安装时被跳过了初始化流程

mysql_secure_installation
一次性配齐安全项

这是最省心、也最符合生产习惯的方式,尤其适合刚装完还没动过权限表的环境。它不只是设密码,还顺手干掉几个常见安全隐患:

运行:
sudo mysql_secure_installation
首次会问当前密码——如果刚装完且没改过,直接回车(空密码) 关键选项:选
y
设置新密码(必须满足策略:至少 8 位、含大小写字母+数字+特殊符);移除匿名用户;禁止
root
远程登录(
Disallow root login remotely? [Y/n]
建议选
y
);删测试库;重载权限表
注意:该脚本不会修改
root@'%'
用户,只处理
root@localhost
,所以远程连不上是正常现象

ALTER USER
修改密码时,认证插件不匹配怎么办?

MySQL 8.0 默认用

caching_sha2_password
插件,但老客户端(如某些 PHP 扩展、旧版 Navicat、甚至部分 Python MySQL 驱动)不支持,连上就报错:
Client does not support authentication protocol requested by server

登录后执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码';
不要只写
IDENTIFIED BY
,必须显式指定
WITH mysql_native_password
改完立刻
FLUSH PRIVILEGES;
,不用重启服务
验证:用同一个客户端重连,看是否还报插件错误

跳过权限表重置密码,为什么加了
--skip-networking

很多人照着教程加

--skip-grant-tables
却忘了加
--skip-networking
,结果重置中途被远程攻击者连进来把密码又改了——这不是危言耸听,而是真实风险。

正确启动方式:
sudo mysqld_safe --skip-grant-tables --skip-networking &
--skip-networking
关闭 TCP/IP 端口,只允许本地 socket 连接,杜绝远程干扰
改密码后,必须退出 MySQL、停掉这个
mysqld_safe
进程,再用正常方式
sudo systemctl restart mysql
启动服务
切记:改完立即删掉配置文件里的
skip-grant-tables
行,否则下次重启又失效

最常被忽略的一点:MySQL 8.0+ 的

PASSWORD()
函数已彻底移除,任何包含它的语句(比如
UPDATE user SET authentication_string = PASSWORD('xxx')
)都会报错。别抄老博客代码,认准
ALTER USER ... IDENTIFIED BY
或带插件声明的变体。

相关推荐