mysql安装后必须立即执行mysql_secure_installation:先查临时密码(rpm/deb包在/var/log/mysqld.log中),用其登录后运行该脚本设置强密码、删匿名用户、禁远程root、删test库;若无临时密码,需跳过授权表重置;windows msi版则在图形向导中完成等效配置。

直接装完就开用,等于把数据库大门敞开——MySQL安装后必须立刻执行 mysql_secure_installation,否则 root 账户空密码、匿名用户、远程 root 登录全开着,几秒内就能被扫描工具打穿。
Linux 上用包管理器安装后,mysql_secure_installation 为什么常报错?
常见现象是执行命令时提示 ERROR 1045 (28000): Access denied for user 'root'@'localhost' 或卡在“Enter current password for root (enter for none)”不动。
- Ubuntu/Debian 安装
mysql-server后,root 默认用 socket 认证(不是密码),此时直接回车会失败;得先用sudo mysql进去,再执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码'; FLUSH PRIVILEGES; - CentOS/RHEL 8+ 使用
mysql-community-server包,首次启动后 root 密码写在/var/log/mysqld.log里,搜索A temporary password才能拿到临时密码 -
mysql_secure_installation必须由有 sudo 权限的用户运行,不能用普通用户身份执行
Windows MSI 安装后,mysql_secure_installation 根本不存在怎么办?
MSI 安装包(如 MySQL Installer for Windows)压根不提供这个脚本——它把安全配置提前融合进图形化向导里了。你跳过向导里的安全步骤,就等于没做安全配置。
- 安装时必须勾选 “Enable TCP/IP Networking”,并确认端口是
3306(或你指定的其他端口) - “Authentication Method” 必须选
Use Strong Password Encryption,否则旧驱动连不上;若要兼容老程序,安装完手动执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxx'; - “Root Password” 步骤输的密码,就是后续所有安全操作的起点,丢了就得重装或进 safe mode 重置
- 安装完立刻打开服务管理器,确认
MySQL80(或你命名的服务)状态是“正在运行”,否则mysql -u root -p会报Can't connect to MySQL server
二进制解压版(Linux/Windows ZIP)如何补上安全配置?
这种安装方式最灵活,也最容易漏掉安全初始化——它不自动创建 root 密码,也不禁用匿名用户,全靠你手动补全。
- 先用
mysqld --initialize --console生成临时 root 密码(注意看输出末尾那串,只出现一次) - 启动服务后,必须立刻用临时密码登录:
mysql -u root -p,然后逐条执行:DROP USER ''@'localhost'; DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES; - 修改密码策略(可选但推荐):
SET GLOBAL validate_password.policy=LOW; SET GLOBAL validate_password.length=8;,否则设简单密码会失败 - 禁止远程 root:
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');,再FLUSH PRIVILEGES;
真正容易被忽略的点是:安全配置不是一次性的。每次升级 MySQL 版本、重装系统、或复制 data 目录迁移实例,mysql_secure_installation 或等效操作都得重来一遍——它不随数据文件持久化,只作用于当前实例的权限表状态。











