根本原因是MySQL服务未启动或root认证方式不匹配;需先启动服务并确认状态,再处理auth_socket/caching_sha2_password插件冲突,设强密码并手动更新认证方式,最后务必手写记录密码。

根本原因不是脚本坏了,而是 MySQL 服务压根没跑起来,或者 root 用户认证方式和脚本预期不匹配。
mysql_secure_installation 报 “Can't connect to local MySQL server through socket”
这是最常卡住的第一步。脚本根本连不上 mysqld,不是密码问题,是服务没启动。
- Linux(systemd):先运行
sudo systemctl start mysqld(CentOS/RHEL)或sudo systemctl start mysql(Ubuntu/Debian),再用sudo systemctl status mysqld确认状态为active (running) - macOS(Homebrew):必须先执行
brew services start mysql,否则mysql_secure_installation会直接报 socket 连接失败 - Windows:在“服务”管理器中手动启动
MySQL80(或你安装时指定的服务名),不能只靠 Installer 图形界面点完就以为完事了
执行中途或完成后报 “Access denied for user 'root'@'localhost'”
常见于 MySQL 5.7+ 和 8.0,默认 root 用户用的是 auth_socket 或 caching_sha2_password 插件,而 mysql_secure_installation 强制走密码验证路径,两者打架。
- 首次运行时,第 1 步
Set password for root?务必选Y,输一个强密码——留空会导致后续所有mysql -u root -p都失败 - 如果已经锁死(比如设了空密码或插件冲突),需临时跳过权限检查:
sudo mysqld_safe --skip-grant-tables --skip-networking &,然后进mysql -u root手动更新mysql.user表的authentication_string - MySQL 8.0 下若客户端报错,可能得改认证插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
提示 “Insecure configuration” 卡住不动
脚本检测到 root 没设密码,但又不允许你跳过——它不接受“先跑完再设”的逻辑。
- 不能直接跑
mysql_secure_installation --use-defaults,除非 root 已有密码 - 临时解法是用
mysqld --skip-grant-tables --skip-networking &启动,进库后用UPDATE mysql.user SET authentication_string=PASSWORD('newpass') WHERE User='root'; FLUSH PRIVILEGES;补上密码,再重跑脚本 - 注意:MySQL 8.0+ 的
PASSWORD()函数已废弃,得用ALTER USER ... IDENTIFIED BY替代
最容易被忽略的一点:脚本全程不会告诉你新密码记在哪,也不会存进任何配置文件。输完就靠你自己写下来——别信“我待会儿再设”,待会儿就登不进去了。

















