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

如何通过.mylogin.cnf自动化Chef部署MySQL的相关操作?

解决Chef自动化MySQL安装中的.mylogin.cnf使用与mysql_secure_installation自动化问题

一、通过.mylogin.cnf创建数据库用户及设置密码

首先得明确,.mylogin.cnf是mysql_config_editor生成的加密登录配置文件,核心优势就是避免明文密码暴露。在Chef自动化流程里,你可以直接借助这个文件的登录路径来执行MySQL命令,完全不需要在命令行里明文传递密码。

关键实现步骤:

  1. 确保.mylogin.cnf的权限合规
    MySQL强制要求这个文件的权限必须是600,否则会拒绝读取。在Chef里可以用file资源来管控:
file '/root/.mylogin.cnf' do
  mode '0600'
  owner 'root'
  group 'root'
  action :create
  # 若需从模板生成或远程上传,可在此添加source/content属性
end
  1. 通过登录路径执行用户创建命令
    你的admin登录路径对应root用户,直接用--login-path=admin参数调用mysql命令即可完成用户创建与授权:
execute 'create_mysql_user' do
  command <<-EOF
    mysql --login-path=admin -e "CREATE USER 'mysqluser'@'localhost' IDENTIFIED BY 'your_secure_password';"
    mysql --login-path=admin -e "GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'localhost' WITH GRANT OPTION;"
    mysql --login-path=admin -e "FLUSH PRIVILEGES;"
  EOF
  # 加个幂等性判断,避免重复执行
  not_if "mysql --login-path=admin -e 'SELECT User FROM mysql.user' | grep mysqluser"
end

二、自动化mysql_secure_installation(摆脱交互式操作)

mysql_secure_installation本身是交互式脚本,没法直接通过--defaults-file或--login-path参数实现自动化,但我们可以用MySQL命令模拟它的所有安全配置步骤,完美适配Chef的自动化流程。

模拟mysql_secure_installation的核心操作:

mysql_secure_installation主要完成5项安全配置,我们把它转化为可批量执行的SQL命令:

execute 'mysql_secure_installation' do
  command <<-EOF
    # 1. 删除匿名用户
    mysql --login-path=admin -e "DELETE FROM mysql.user WHERE User='';"
    # 2. 禁止root远程登录(若需保留远程root,可注释此步)
    mysql --login-path=admin -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
    # 3. 删除test数据库及关联权限
    mysql --login-path=admin -e "DROP DATABASE IF EXISTS test;"
    mysql --login-path=admin -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';"
    # 4. 重新加载权限表
    mysql --login-path=admin -e "FLUSH PRIVILEGES;"
  EOF
  # 确保只执行一次的判断条件
  not_if "mysql --login-path=admin -e 'SELECT User FROM mysql.user' | grep -v 'root' | grep -v 'mysqluser'"
end

如果你已经通过mysqladmin -u root password设置过root密码,上面的命令就完全覆盖了mysql_secure_installation的所有核心安全配置,全程无交互。

额外小贴士

  • 如果你用Chef官方的mysql cookbook,也可以结合其提供的mysql_user资源配合登录路径使用,核心逻辑还是靠--login-path避免明文密码。
  • 确保Chef客户端主机已安装mysql-client包,否则无法使用mysql和mysql_config_editor命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:27:36