SQL运维自动化实践_Ansible批量管理数据库

Ansible是数据库运维自动化的高效工具,通过SSH批量执行SQL脚本、配置检查、备份触发等任务,无需在目标服务器安装客户端,适用于中小规模MySQL/PostgreSQL标准化管理。

Ansible 是数据库运维自动化的高效工具,无需在目标数据库服务器安装客户端,通过 SSH 即可批量执行 SQL 脚本、配置检查、备份触发、服务启停等任务,适合中小规模 MySQL/PostgreSQL 等常见数据库的标准化管理。

核心思路:用 Ansible 模块替代手工操作

避免写 Shell 脚本拼接 mysql 命令,优先使用官方或社区成熟模块:

  • mysql_db:创建/删除数据库、导入 SQL 文件(支持 gzip 压缩)
  • mysql_user:增删改用户、授权、密码重置(支持 password_hash)
  • community.mysql.mysql_query:执行任意 DML/DQL,返回结果可注册变量做判断
  • systemdservice:控制 mysqld/postgresql 服务状态
  • 配合 copytemplate 模块推送 my.cnf / pg_hba.conf 配置文件

典型场景示例:一键巡检与修复

编写 playbook 实现“连接性→权限→慢查询→磁盘空间”四级检查,并对低风险项自动修正:

  • mysql_querySHOW SLAVE STATUS,若 Seconds_Behind_Master > 300,发告警但不自动跳过错误
  • SELECT user, host FROM mysql.user WHERE password_expired = 'Y',对指定账号调用 mysql_user 重置密码并设为未过期
  • command 执行 df -h /var/lib/mysql | awk 'NR==2 {print $5}',超阈值时清理旧 binlog(PURGE BINARY LOGS BEFORE ...

安全与幂等性要点

数据库操作不可逆,Ansible 的幂等设计是底线保障:

  • 所有写操作前加 when 判断,例如 “只有当主库角色为 primary 时才执行备份”
  • 敏感操作(如 DROP TABLE)绝不硬编码在 playbook 中,统一走 vars_prompt 或外部 vault 加密变量
  • SQL 脚本统一存放在 files/ 下,用 mysql_db: state=import 导入,避免命令行注入风险
  • 测试环境先跑 --check --diff,确认变更内容再真实执行

与数据库生态联动

Ansible 不是孤岛,需嵌入现有流程:

  • 和 Prometheus+Alertmanager 对接:巡检失败时由 Ansible 触发 uri 模块调用告警接口
  • 配合备份工具(如 mydumper/xtrabackup):playbook 中用 shell 启动备份,再用 stat 校验备份文件完整性
  • 上线 SQL 变更时,结合 GitLab CI,在 merge request 合并后自动部署到预发库执行 mysql_query 并验证结果