You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash与Expect脚本交互实现MySQL安全安装自动化

自动完成MySQL安全配置的Expect脚本实现

刚好我之前做批量装机脚本时也碰到过这个需求,用Expect脚本就能完美自动应答mysql_secure_installation的所有交互问题,完全不需要人工干预。下面是具体实现:

第一步:先安装Expect工具

不同发行版的安装命令略有不同,先确保系统上装了Expect:

  • Debian/Ubuntu系:sudo apt update && sudo apt install expect -y
  • RHEL/CentOS系:sudo yum install expect -y

第二步:编写Expect脚本

创建一个名为mysql_secure_setup.exp的文件,内容如下(记得把YOUR_MYSQL_ROOT_PASSWORD替换成你要设置的实际密码):

#!/usr/bin/expect

# 设置超时时间,避免脚本卡住
set timeout 10

# 启动mysql_secure_installation命令
spawn sudo mysql_secure_installation

# 1. 输入当前root密码(无密码直接回车)
expect "Enter current password for root (enter for none):"
send "\r"

# 2. 是否设置root密码?选Y
expect "Set root password? \[Y/n\]"
send "Y\r"

# 3. 输入新的root密码
expect "New password:"
send "YOUR_MYSQL_ROOT_PASSWORD\r"

# 4. 确认新密码
expect "Re-enter new password:"
send "YOUR_MYSQL_ROOT_PASSWORD\r"

# 5. 是否移除匿名用户?选Y
expect "Remove anonymous users? \[Y/n\]"
send "Y\r"

# 6. 是否禁止root远程登录?选Y(如果需要远程连接可以改成n,这里按统一硬编码来)
expect "Disallow root login remotely? \[Y/n\]"
send "Y\r"

# 7. 是否删除测试数据库?选Y
expect "Remove test database and access to it? \[Y/n\]"
send "Y\r"

# 8. 是否重新加载权限表?选Y
expect "Reload privilege tables now? \[Y/n\]"
send "Y\r"

# 等待脚本执行完成
expect eof

第三步:给脚本加执行权限并在Bash脚本中调用

先给Expect脚本添加可执行权限:

chmod +x mysql_secure_setup.exp

然后在你的批量装机Bash脚本里,直接调用这个Expect脚本就行:

# 调用自动配置脚本
./mysql_secure_setup.exp

小提示

  • 如果你是在MySQL 8.0+版本上使用,有些交互提示可能略有不同,但大体逻辑一致,你可以根据实际输出调整expect里的匹配字符串
  • 密码硬编码在脚本里要注意安全,批量装机完成后可以考虑清理脚本或者加密存储密码(不过你要求硬编码统一,这个就按需求来)

内容的提问来源于stack exchange,提问作者Rhys Clarke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:56:34