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,返回结果可注册变量做判断
- systemd 或 service:控制 mysqld/postgresql 服务状态
- 配合 copy 和 template 模块推送 my.cnf / pg_hba.conf 配置文件
典型场景示例:一键巡检与修复
编写 playbook 实现“连接性→权限→慢查询→磁盘空间”四级检查,并对低风险项自动修正:
- 用 mysql_query 查
SHOW 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并验证结果










