一、认识Archery
1.1 平台定位与背景
“在实际数据库运维中,一次忘记加WHERE条件的UPDATE可能导致整张表数据丢失,这不仅仅是理论上的风险,而是许多团队的真实教训。”
Archery是一款开源的一站式SQL审核查询平台,旨在提升数据库操作的安全性、效率和规范性,将数据库变更从“个人行为”转变为“团队协作流程”。
它的核心价值包括:
- 安全管控(杜绝生产库直连,所有SQL通过平台执行)
- 流程规范(SQL提交→自动审核→人工审批→自动执行全流程留痕)
- 效率提升(日均处理SQL从传统人工审核的约200条大幅提升)。
1.2 核心功能全景图
| 功能模块 |
核心能力 |
用户价值 |
| SQL审核 |
Web提交、自动语法检查+规则引擎、多级审批流 |
规避误操作风险 |
| SQL查询 |
可视化数据查询+导出、敏感数据脱敏 |
安全查询、审计溯源 |
| 工单管理 |
全生命周期跟踪 (提交-> 审核 -> 执行 -> 归档) |
流程规范、责任溯源 |
| 运维管理 |
数据库实例健康监控、会话管理、慢日志分析 |
主动运维、性能优化 |
| SQL优化 |
基于PT收集慢日志,多工具优化建议 |
性能调优 |
1.3 技术架构
Archery的部署架构包含以下核心组件:
- Archery Web服务:基于Django框架的Web应用,提供用户界面和API
- 关系型数据库(MySQL/PostgreSQL):存储元数据、用户信息、工单记录
- 缓存服务(Redis):会话存储、任务队列
- 消息队列(Redis/RabbitMQ):处理异步任务
- 审核引擎(goInception):SQL审核与执行核心
二、安装与初始配置
2.1 环境准备
| 项目 |
要求 |
| CPU |
建议2核以上 |
| 内存 |
测试环境4GB以上,生产环境按需扩容 |
| 磁盘 |
建议20GB以上 |
| Docker |
版本20.10以上 |
| Docker Compose |
版本2.0以上 |
| Git |
用于拉取代码 |
2.2 一键部署步骤
# 1. 下载Archery(以v1.13.0为例)
wget https://github.com/hhyo/Archery/archive/refs/tags/v1.13.0.tar.gz
tar-zxvf v1.13.0.tar.gz
cd Archery-1.13.0/src/docker-compose/
# 2. 启动服务
docker compose up -d
# 3. 表结构初始化
dockerexec-ti archery /bin/bash
cd /opt/archery
source /opt/venv4archery/bin/activate
python3 manage.py makemigrations sql
python3 manage.py migrate
# 4. 数据初始化
python3 manage.py dbshell<sql/fixtures/auth_group.sql
python3 manage.py dbshell<src/init_sql/mysql_slow_query_review.sql
# 5. 创建管理员账户
python3 manage.py createsuperuser
# 6. 退出容器并访问
exit
# 访问 http://服务器IP:9123
2.3 关键配置要点
⚠️ 部署避坑指南(重点提醒)
- Binlog务必开启:回滚语句生成依赖MySQL binlog,否则审核失败
- 资源预留:建议4GB以上内存,避免容器OOM
- 端口映射:默认9123端口,确保防火墙开放
三、核心功能使用
3.1 系统角色说明
| 角色 |
权限 |
主要职责 |
| RD(开发工程师) |
提交SQL上线工单、SQL查询 |
发起变更 |
| DBA(数据库管理员) |
审核SQL、执行上线 |
安全把关 |
| PM(项目经理) |
审批工单、审批权限 |
流程控制 |
3.2 SQL上线流程
标准审批流程:RD提交、DBA审核、PM审批
功能亮点:
- 自动审批:支持正则判断,不在正则范围内的SQL无需人工审批
- 快速上线:工单详情可快速提交相同SQL到其他实例
- 定时执行:支持工单审核后定时或立即执行
3.3 SQL查询功能
- 授权管理:工作流控制SQL查询授权,支持库表级权限限制和授权时间控制
- 敏感数据脱敏:查询结果中的手机号、身份证号等敏感信息自动打码
- 查询导出:支持Excel/CSV格式导出,历史记录自动归档
3.4 SQL优化与慢日志分析
- 集成慢查询日志分析,帮助快速定位性能瓶颈
- 支持SQLAdvisor、SOAR等多工具优化建议
- SQL语句自动格式化,提升代码可读性
四、权限体系与审核规则配置
4.1 权限体系架构
Archery采用多层次的权限管理模型:
- 资源组:资源对象的集合,与用户关联后隔离资源访问权限,成员仅可查看组关联对象的数据
- 权限组:权限集合,工作流审批依赖权限组,可根据职能划分
- 核心权限定义:
- sql_submit:提交SQL上线工单
- sql_review:审核SQL上线工单
- sql_execute:执行SQL上线工单
4.2 审核规则配置
高危SQL拦截规则(CRITICAL_DDL_REGEX):
正则示例:^truncate|^rename|^drop
匹配的语句会被禁止提交
# 示例操作SQL
truncate table IF EXISTS <TableName>;
drop table IF EXISTS <TableName>
RENAME TABLE <CurrentTableName> TO <NewTableName>;
自动驳回等级控制(AUTO_REVIEW_WRONG):
1:审核出现警告即驳回
2或空:仅出现错误才驳回
其他:不驳回
自动审批开关(AUTO_REVIEW):
- 结合
AUTO_REVIEW_REGEX和MAX_UPDATE_ROWS配置
- update语句预估影响行数超限时需人工审批
4.3 工作流配置步骤
- 系统管理 → 配置项管理 → 工单审核流配置
- 变更审批流程(选择审批流顺序)
- 完成后SQL上线需依次经 成员提交、Leader审核、ManagerLeader(Feddy大哥或运维)审批
五、运维管理与常见问题
5.1 日常运维监控
- 会话管理:支持查看和批量终止会话
- 慢日志分析:集成慢查询日志,提供分析和展示界面
- 数据库健康监控:实例空间使用、会话状态监控
5.2 常见问题及解决方案
| 问题现象 |
可能原因 |
解决方案 |
| 提交SQL时提示“开启binlog日志” |
MySQL未开启binlog |
配置MySQL开启binlog |
| 工单卡在待审核状态 |
审批流程未配置完整 |
检查工单审核流配置 |
| 用户无法访问实例 |
资源组未正确关联 |
系统管理-资源组管理,关联用户和实例 |
| goInception进程无响应 |
内存溢出或进程僵死 |
重启goInception服务 |
5.3 消息通知配置
支持通知方式:钉钉(资源组级别)、企业微信、邮件
通知触发场景:工单提交、审核、取消、执行的各个阶段
六、重点总结
- Archery是什么?→ 开源的一站式SQL审核查询平台
- 为什么要用?→ 解决SQL变更管理的效率、安全、流程三大痛点
- 核心能力?→ 审核+查询+工单+运维+优化
- 谁负责什么?→ 成员提交、Leader审核、ManagerLeader(Feddy大哥或运维)审批
- 如何保障安全?→ 自动审核 + 权限隔离 + 多级审批 + 操作留痕
七、参考资料