简介:《archery使用手册》是一份针对Archery SQL审核查询平台的完整操作指南,适合数据库运维、开发与测试人员快速上手MySQL审核及日常运维。文档首先解析SQL审核的执行流程与自定义规则,包括建表主键及注释检测、高危语句自动驳回、钉钉通知,并支持立即/定时执行与回滚SQL生成;随后演示SQL分析、慢日志统计、通过执行计划获取优化建议等方法。在实例管理部分,覆盖binlog清理、会话终止、事务与锁信息排查、账号授权及动态参数配置;工具插件章节介绍PTArchiver数据归档、Binlog2SQL解析binlog生成回滚SQL、SchemaSync表结构同步等实用功能,并结合开发、测试环境的完整工单流程给出分步实践。资源以单个doc文档打包,容量1.2MB,内容模块划分清晰,便于按需查阅。已有1477人学习下载,对正在落地SQL规范审核与数据库自动化运维的团队具有直接参考价值。
1. 从一次线上事故说起:为什么数据平台需要 Archery 这类 SQL 审核工具
某团队曾经在线上出过一次事故:一条没有 WHERE 条件的 UPDATE 被直接提交到了生产库,等发现时整张表的数据已经被改成了同一个值,最后用备份抢修了两个多小时。事后复盘,如果这条 SQL 在进入生产前经过一次自动审核,这个错误完全可以在提交阶段就被拦截。Archery 就是定位在这条防线上的一类平台:它对 SQL 做语法解析和规则审核,同时覆盖 MySQL 实例的日常运维,把「开发提交 SQL → 审核 → 执行 → 回滚」这条链路统一收口到一个系统里。这篇方案会按「需求 → 总体设计 → 功能落地 → 实例管理与插件 → 排查避坑 → 验收答辩」的顺序,把这套工具拆成一份可以直接照着做的完整设计。适合正在搭建 SQL 审核流程的 DBA、运维开发,以及需要交数据库方向课程设计或毕设的同学参考。
2. 总体架构设计:SQL 审核、实例管理与工具插件的模块划分
2.1 平台定位:一个入口覆盖审核、查询和运维三类操作
Archery 的定位不是普通的 SQL 执行客户端,而是把 SQL 审核从「人工走查」变成「系统强制检查」的中间层。它天然区分使用者和权限:开发工程师提交 SQL 工单,项目经理或测试工程师做审核,实例管理和高危操作默认只有管理员账号能操作。这种分层意味着在真实环境里,它不是替代开发工具,而是上线前最后一道闸门。
从模块上看,Archery 主要由四个功能域构成:SQL 审核、SQL 优化、实例管理、工具插件。SQL 审核负责工单全流程,优化负责执行计划分析和慢 SQL 统计,实例管理负责 binlog 清理、会话、事务、锁、账号和参数,工具插件则把 PTArchiver、Binlog2SQL、SchemaSync 这些原本要手工命令行的工具变成界面化操作。以下表格给出各模块与对应职责:
| 模块 | 核心职责 | 典型操作 |
|---|---|---|
| SQL 审核 | 语法解析、规范检查、高危语句驳回、回滚 SQL 生成 | 提交工单、检测、审核、执行 |
| SQL 优化 | 执行计划分析、优化建议、慢 SQL 统计 | 分析 SQL、查看报告 |
| 实例管理 | binlog 清理、会话终止、事务与锁排查、账号授权、参数修改 | 查看进程、终止会话、清 binlog |
| 工具插件 | 数据归档、binlog 解析、表结构同步 | PTArchiver 归档、Binlog2SQL 回滚、SchemaSync 比对 |
在设计一个基于 Archery 的完整方案时,通常的做法是先明确「哪类人走哪条流程」:研发往开发环境提交工单,走「研发 → 项目经理」两级审核;测试从 Git 取开发提交的 SQL 文件,在测试环境发起工单,由测试同事自己审核并执行。这样把流程固化到角色上,比单纯依赖口头约定更不容易漏审。
2.2 工单流程设计:从 SQL 检测到提交审核的状态流转
Archery 的工单生命周期可以抽象为五个状态:待检测、检测通过、审核中、待执行、已执行。提交工单时,操作人先填写目标实例、数据库和 SQL 文件,点击「SQL 检测」按钮。检测阶段做的是语法解析与规则校验,如果返回 error,工单停留在待检测状态,SQL 不会进入任何执行环节;检测通过后点击「SQL 提交」,工单进入审核状态。
审核通过后的执行环节值得重点设计:Archery 同时支持「立即执行」和「定时执行」两种方式。立即执行适合低峰期的 DDL 或已确认安全的变更;定时执行适合需要错峰上线的场景,比如凌晨批量修改表结构。两种方式都会生成回滚 SQL 留底,工单详情里可以下载回滚 SQL,也可以直接查看回滚内容,这相当于给每次变更上了「后悔药」。
从实施角度看,我一般会在方案里强制要求一条规则:生产环境的高危语句必须经过两级审核,并且必须生成回滚 SQL 后才能点执行。这里的高危语句包括没有 WHERE 条件的 UPDATE/ DELETE、DROP 操作、TRUNCATE 等。Archery 的高危语句自动驳回机制正好承担这部分检查,规则可以在后台按实例粒度配置,避免开发环境也套用生产那样严格的红线。
2.3 通知链路:钉钉通知与待办事项的闭环
审核流程很长,如果不做通知,工单会卡在某个审核人手里没人知道。Archery 支持钉钉通知,当工单提交、审核通过、执行完成或需要回滚时,会向相关角色推送消息。设计上,通知不是可选项,而是流程闭环的一部分:提交工单后通知审核人,审核通过后通知提交人,执行完成后通知所有参与者。
在部署方案里,钉钉通知需要提前配置机器人 webhook,并且要在 Archery 的设置中把审核人角色与待办列表连接起来。项目经理登录后点击右上角通知按钮,就能看到自己的待办事项。这个设计解决了真实团队里「工单发起后无人响应」的典型问题,也让每次审核动作都有迹可循。
3. 核心功能落地:从 SQL 审核到优化建议的完整实践
3.1 SQL 审核规则:不只查语法,还查规范
Archery 的 SQL 审核不止做语法解析,它还会按自定义规则检查 SQL 是否符合数据库规范。最常见的检查项包括:建表必须有主键、表必须有注释、列必须有注释、索引命名规范、禁止 SELECT *、禁止不带 WHERE 的 UPDATE/DELETE 等。语法错误直接被拦截,规范问题会被标记为警告或错误,由审核人在工单里看到。
举一个实际场景:开发提交建表语句,只写了字段名和类型,没写主键和注释。Archery 检测后会直接返回 error,开发需要在原 SQL 上补充主键和列注释,重新提交检测。这里的重点是「检测是硬性的」:error 状态不允许提交审核,这样就避免了人工提醒容易漏掉的规范问题。
从落地角度,我一般会在方案的设计阶段建立一份规则清单,分为三类:必选错误(建表无主键、高危语句)、建议警告(表名不带前缀、缺少索引)、信息提示(影响行数过大)。Archery 支持这种分级,把不同的检查项配置成 error 或 warn,避免所有问题一刀切。
3.2 SQL 优化:从 SELECT * 到执行计划分析
Archery 的 SQL 优化模块能对指定 SQL 做执行计划分析,并返回优化建议。优化建议的核心逻辑是:先看访问路径,再看返回字段。以下是一个典型示例:
-- 优化前:查询所有字段,且无法确认是否走索引 SELECT * FROM baidd.emp WHERE ename='dan_1';执行计划分析后,通常会发现这里是全表扫描,优化建议会提示:ename 字段是否建立索引、返回字段是否过多。改成明确字段列表后,分析结果会变 OK:
-- 优化后:只返回业务需要的字段 SELECT ename, job, sal FROM baidd.emp WHERE ename='dan_1';这里有一个容易被忽略的点:优化模块返回的建议是「参考值」,不是「最终答案」。真正上线前,还需要确认 ename 字段的索引是否已经存在,以及数据分布情况。如果存在索引但选择性不高,优化器可能仍然走全表扫描。Archery 的价值在于把执行计划可视化,让人能快速看到访问路径,而不是直接替开发做决定。
3.3 慢 SQL 统计与优化闭环
慢 SQL 是数据库性能问题的第一来源。Archery 能展示慢 SQL 及其统计信息,包括执行次数、平均耗时、最大耗时等。设计思路是:把慢 SQL 作为优化入口,点击某条慢 SQL 后直接调用 SQL 优化模块,生成执行计划和优化建议,形成「发现慢 SQL → 分析 → 优化 → 验证」的闭环。
在实施时,我会在部署方案里加一条约定:每个实例每周同步一次慢日志,DBA 从慢 SQL 列表里挑执行次数最多、耗时最长的 Top 10 做分析。优化完成后,下周再回看统计数据,确认确实降下来了。这套闭环同时覆盖开发自测和生产排查,比单次优化更有说服力。
4. 实例管理实战:会话、事务、锁与账号的运维闭环
4.1 会话管理:定位阻塞 SQL 并终止
实例管理是 Archery 最贴近 DBA 日常工作的部分。会话管理模块可以看到当前正在执行的 SQL,按数据库实例和 command 类型过滤,默认只显示 query 类型,需要查看所有进程时切换为 All。这里有一个细节:查看进程列表时,勾选「完整 INFO」才能显示完整 SQL 文本,否则长 SQL 会被截断,排查时很容易漏掉关键信息。
定位到某个 SQL 导致阻塞后,可以直接点击「终止会话」按钮。这个功能在生产环境下要谨慎使用,终止前务必确认该会话不是批量导入或关键事务。我的做法是:先看完整 INFO 确认 SQL 内容,再确认发起账号角色,最后才终止。终止动作本身可以在 Archery 的操作记录里留痕,方便事后追溯。
4.2 事务与锁信息:用 trx_mysql_thread_id 串联定位
锁等待是数据库运维里最常见的疑难问题,Archery 把事务信息和锁信息做成可视化界面,定位路径比命令行清晰得多。事务信息里能看到当前运行事务,其中trx_mysql_thread_id对应会话管理里的 THREAD ID。想杀掉事务时,先按这个 ID 在进程状态里搜索,找到后终止会话即可。
锁信息模块的典型用法是模拟锁等待。以下是在两个独立连接里执行的 SQL:
-- 会话 A:开启事务并更新主键为 2 的记录,不提交 BEGIN; UPDATE baidd.t2 SET ename='baidd' WHERE id=2; -- 会话 B:对同一条记录更新,会被阻塞 UPDATE baidd.t2 SET ename='dan' WHERE id=2;会话 B 阻塞后,打开 Archery 的锁信息,能看到等待事务的 SQL(即被阻塞的 SQL),也能看到阻塞方的线程 ID。根据阻塞方线程 ID 去进程状态里找到对应会话并终止,锁就释放了。这套操作适用于日常排障和答辩演示,因为它完整覆盖了「模拟问题 → 定位问题 → 解决问题」三个环节。
4.3 账号管理与参数配置:把高危操作收进界面
账号管理模块解决的是「创建账号、授权、改密、删除」的图形化操作问题。建完账号后可以为其授权,例如赋予增删改查和修改表结构的权限。设计上有一条红线:权限要按最小化原则分配,普通应用账号只给 SELECT/INSERT/UPDATE/DELETE,不给 DROP 和 GRANT OPTION。Archery 的账号管理让这条红线可以通过界面落实,而不是靠 DBA 手工敲命令。
参数配置模块可以修改实例动态参数,并记录修改历史。改参数本身是高危操作,没有留痕就会变成黑匣子。Archery 会把每一次参数变更记录在案,这样一旦实例行为异常,可以先回看参数变更历史。
4.4 binlog 清理与磁盘空间释放
实例列表里提供 binlog 清理功能,用于释放磁盘空间。操作逻辑需要注意:在实例列表选中某个 binlog 后,该 binlog 之前的所有 binlog 都会一并删除。也就是说,选中的位置决定了保留边界。清理前必须确认两个问题:一是目标实例是否被主从复制依赖,二是保留的文件是否足够完成增量恢复。通常在磁盘空间不足时,先按时间排序,确认最老的 binlog 已经不再被复制位点引用,再执行清理。
5. 高频问题排查与避坑:审核驳回、回滚失败、锁等待的典型翻车点
5.1 审核阶段的翻车点:检测 error 但开发认为没问题
现象:开发提交 SQL 后点击检测,返回 error。开发对照 SQL 反复看,觉得语法是对的,也没有高危操作,不理解为什么被拦。打开工单详情,发现 error 信息提示的是「建表缺少主键」或「表名不符合命名规范」。
原因:Archery 的检测包含语法解析和规则校验两层。语法正确不代表规范正确,规则库里配置了主键、注释、命名等硬性要求,缺任何一项都会判 error。
解决:有两种处理方式。第一种是按 error 提示修改 SQL,补上主键和注释后重新检测;第二种是如果确认这条 SQL 的场景不需要某条规则(例如临时表),由管理员在规则配置里将该项调整为 warn。我一般会在方案里建议:规范类规则保持 error 不放松,避免开发养成「跳过规范」的习惯。
5.2 回滚阶段的翻车点:DDL 无法回滚与 Binlog2SQL 的边界
现象:执行完一条 DROP TABLE 后发现删错了,点「下载回滚 SQL」,回滚内容为空。或使用 Binlog2SQL 生成回滚 SQL 时,提示解析失败。
原因:Archery 的回滚 SQL 依赖 binlog 解析。DML 操作(INSERT/UPDATE/DELETE)可以通过反向解析生成回滚语句,但 DDL 操作在 binlog 里没有足够的行级前后映像,无法生成对应的反向 DDL。Binlog2SQL 明确不支持回滚 DDL,仅能回滚 DML。
解决:在使用前就要建立预期:DDL 变更必须靠备份兜底,不能依赖 Archery 生成回滚。对于 Binlog2SQL 解析失败,还需要检查 binlog 格式,必须设置为 ROW 格式才能解析出完整的前后映像。另外,解析时要指定正确的 binlog 文件名和起始位置,比如master-bin.000009从857到1183,位置越精确,生成的 SQL 越干净。
5.3 运维操作的翻车点:清理 binlog 和终止会话误伤
现象:清理 binlog 后,主从复制中断。或者终止会话时,杀掉了一个正在执行长事务的连接,导致应用端报错。
原因:binlog 清理选中了当前正在使用的文件,或清理到主从还没复制的位点;会话终止时没有先查看完整 SQL 和事务信息,误杀了关键连接。
解决:清理 binlog 前先查看复制状态,确认从库已经拉取的位点,再选择要保留的 binlog 文件。终止会话前,勾选「完整 INFO」查看 SQL 完整文本,并到事务信息里确认该连接是否有未提交事务。我的习惯是:先查锁信息定位阻塞源,再从进程状态里确认进程身份,最后才操作终止,三步缺一不可。
5.4 SchemaSync 的认知误区:只比表结构,不比数据
现象:用 SchemaSync 做开发库和测试库同步后,发现两个库的数据量不一致,误以为同步工具出问题。反复检查配置,工单执行结果都是成功。
原因:SchemaSync 的定位是读取源 DB 和目标 DB 的 schema,自动生成同步更新和回滚的 SQL。它只比对表结构(建表语句、字段、索引、约束),不涉及数据层面的任何比对。
解决:方案里要明确区分两类同步工具:表结构同步用 SchemaSync,数据同步用 PTArchiver 或 Binlog2SQL 数据导出导入。SchemaSync 适合「两个环境表结构漂移」的场景,例如目标库缺少字段或索引时,它会生成相对于源库应该执行的 DDL 操作,同时生成回滚 SQL。比对完确认无误后再执行,避免两边越漂越远。
6. 验收与答辩:用一条完整工单流证明方案可行
验收这套方案,不能只展示界面截图,要搭一套最小验证环境,按真实流程走一遍。我会准备两个 MySQL 实例模拟开发库和测试库,再准备一张无主键的建表 SQL 用于演示审核驳回。验收清单按五个场景设计:第一,提交一条缺主键的建表 SQL,确认检测返回 error 且无法提交;第二,提交一条合规 SQL,走完审核、立即执行、生成回滚 SQL;第三,用两条连接模拟锁等待,从锁信息定位阻塞方并终止;第四,打开 binlog 解析,确认能生成回滚 SQL;第五,用 SchemaSync 比对两个库,确认只生成 DDL 同步语句。每个场景都记录截图和结果,答辩时直接展示。
答辩的技巧是先把最有冲击力的环节放前面:先演示「高危语句自动驳回」,再演示「锁等待定位与终止」,这两个场景最能体现平台价值。然后讲审核流程和自动化插件,评审一般会追问回滚失败的场景,这时就把 DDL 不可回滚的边界讲清楚,说明不是工具缺陷,而是 binlog 机制决定的。曾经有一次演示前发现实例连不上,排查了半天才知道是 binlog 没开启,导致回滚 SQL 生成不了。从那以后,我每次演示前都会强制走一遍冒烟测试:确认 binlog 开启、确认实例可连接、跑通一条完整工单,大概五分钟就能避免现场翻车。这套流程也建议你直接拿去用,希望帮到你。
本文还有配套的精品资源,点击获取