如何通过.mylogin.cnf自动化Chef部署MySQL的相关操作?
解决Chef自动化MySQL安装中的.mylogin.cnf使用与mysql_secure_installation自动化问题
一、通过.mylogin.cnf创建数据库用户及设置密码
首先得明确,.mylogin.cnf是mysql_config_editor生成的加密登录配置文件,核心优势就是避免明文密码暴露。在Chef自动化流程里,你可以直接借助这个文件的登录路径来执行MySQL命令,完全不需要在命令行里明文传递密码。
关键实现步骤:
- 确保.mylogin.cnf的权限合规
MySQL强制要求这个文件的权限必须是600,否则会拒绝读取。在Chef里可以用file资源来管控:
file '/root/.mylogin.cnf' do mode '0600' owner 'root' group 'root' action :create # 若需从模板生成或远程上传,可在此添加source/content属性 end
- 通过登录路径执行用户创建命令
你的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官方的
mysqlcookbook,也可以结合其提供的mysql_user资源配合登录路径使用,核心逻辑还是靠--login-path避免明文密码。 - 确保Chef客户端主机已安装
mysql-client包,否则无法使用mysql和mysql_config_editor命令。
内容的提问来源于stack exchange,提问作者hobbes
相关产品推荐
相关产品推荐

