关于 dbtrail
DBTrail 将 MySQL 的行变更记录到 Parquet 分析副本,并保留历史以供查询和恢复。适合需要在生产数据库之外运行分析、追溯行版本或生成撤销 SQL 的团队。
主要功能
- 01从 binlog 捕获行变更
- 02生成 Parquet 分析副本
- 03通过 DuckDB 查询副本
- 04查看历史行版本
- 05生成精确恢复 SQL
- 06浏览器界面管理快照与变更
适用场景
- 01将报表查询移出 MySQL 主库
- 02检查某行在过去时点的状态
- 03为误操作生成撤销 SQL
MCP 相关
DBTrail 提供 MCP 工具,让 Claude Desktop 或其他 MCP 客户端以自然语言查询部署中的数据。所有工具均为只读。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://api.dbtrail.com/mcpclaude mcp add --transport http com-dbtrail-dbtrail https://api.dbtrail.com/mcp{"mcpServers":{"com-dbtrail-dbtrail":{"type":"http","url":"https://api.dbtrail.com/mcp"}}}在 Cursor 中打开{"servers":{"com-dbtrail-dbtrail":{"type":"http","url":"https://api.dbtrail.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"com-dbtrail-dbtrail":{"type":"http","url":"https://api.dbtrail.com/mcp"}}}{"mcpServers":{"com-dbtrail-dbtrail":{"serverUrl":"https://api.dbtrail.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
$ duckdb -init views.sql
D SELECT c.tier, count(*) AS orders, round(sum(o.total), 2) AS revenue
FROM demo.orders o
JOIN demo.customers c ON c.id = o.customer_id
GROUP BY c.tier ORDER BY revenue DESC;
┌──────────┬────────┬───────────────┐
│ tier │ orders │ revenue │
│ varchar │ int64 │ decimal(38,2) │
├──────────┼────────┼───────────────┤
│ platinum │ 539848 │ 59426197.40 │
│ gold │ 539752 │ 59353658.54 │
│ silver │ 539056 │ 59295443.48 │
│ bronze │ 538385 │ 59242795.95 │
└──────────┴────────┴───────────────┘
该查询读取的是 Parquet 文件。MySQL 主库从未执行过它。
数据仅比源端延迟几分钟。它不是高可用方案,也不是备份。 限制
为什么
报表、仪表板和临时分析如果在主库上运行,就会与应用争抢资源:全表扫描会将工作集挤出缓冲池,长时间读取会阻碍清理操作,而对数百万行执行的 GROUP BY 会将临时表写入磁盘。报表副本意味着要多维护一台 MySQL,还要为其付费、打补丁,而且它仍以行存储的速度响应查询。
DBTrail 为这些查询提供专属副本,并以列式格式存储在 mysqld 之外。
工作原理
- 首次复制时只读取一次表数据(使用 mydumper)。
- 此后只读取 binlog。 DBTrail 通过复制协议连接,就像副本一样。不需要插件,不需要在数据库主机上运行 Agent,也不需要触发器。因此 Amazon RDS 和 Aurora 都能使用。
- 按你的计划更新副本。 DBTrail 将记录的变更合并到新的 Parquet 快照中,更新频率可以是每 5 分钟一次,也可以是每天一次。除非表结构发生变化,否则不会再次读取源端(参见限制)。
- 使用 DuckDB 查询。 自动生成的
views.sql会为每张表创建一个视图,视图名称与源表相同(如shop.orders),并指向最新快照。
一个 Docker Compose 栈,加上一个文件夹或 S3 存储桶即可。无需构建数据管道,无需运行数据仓库,也无需 Kafka。参见 使用 DuckDB 进行分析。
数据表现
数据源:RDS MySQL 8.4,TPC-C 数据集,7300 万行,约 10 GB;在每秒 180 笔事务的 sysbench-tpcc 负载下进行测试。测试于 2026 年 9 月 18 日至 20 日进行,使用 DBTrail 0.84,每 5 分钟刷新一次。六条报表查询的总耗时:
| 查询运行位置 | 总耗时 |
|---|---|
| MySQL | 22 min 28 s |
| ClickHouse(由 Airbyte CDC 提供数据) | 12.6 s |
| DBTrail + DuckDB | 4.6 s |
| MyDuck Server | 2.7 s |
其中一条查询涉及两张表的连接,并按地区和月份分组;在 MySQL 上耗时 3 min 52 s,在副本上耗时 0.9 s。MyDuck 在这组测试中速度更快:它以 DuckDB 自有格式存储数据,只有 DuckDB 能读取。
另行测量数据新鲜度时,负载约为每秒 340 笔事务,刷新间隔为 5 分钟:从提交到数据可在 DuckDB 中查询,耗时 2.7 至 13.2 分钟,中位数为 5.9 分钟。
测试方法、成本对比和 ClickBench 结果: 介绍 MySQL 分析型副本。
你将获得
一个用于分析的副本
- 将繁重查询从 MySQL 上卸载。 查询在副本上由 DuckDB 在独立进程中运行。只有 binlog 会离开
mysqld。 - DuckDB,打开即用。 一个
views.sql文件,每张表对应一个视图。DuckDB 会在你的设备上运行它:笔记本电脑、笔记本或 BI 服务器。 - 使用你自己的开放文件。 磁盘或 S3 上的普通 Parquet 文件,附带 Hive 分区的变更历史。没有任何专有格式。
- 也支持其他引擎。 使用
bintrail export iceberg将快照导出为 Iceberg,供 Spark、Trino 或 Athena 使用。参见 Iceberg 导出。
通过
views.sql打开副本。 直接读取 Parquet 文件的引擎,只能看到每张表最近一次完整写入时的状态,可能会漏掉存储在旁边的变更文件。视图会为你应用这些变更。
基于同一数据流实现时间回溯和恢复
DBTrail 会在 MySQL 服务器上保留每项变更的前后内容,并生成撤销不需要的变更所需的 SQL。它从与副本相同的 binlog 中读取变更,从安装之日起便开始记录:
- 每一行的每个版本。 通过 Web 界面或
reconstructCLI 查看任意行或表在过去某个时刻的状态。可选的 MySQL 端口(beta)支持从任何mysql客户端使用AS OFSQL 查询相同内容。参见 时间回溯 SQL。 - 精确撤销。 生成仅用于还原受损行的 SQL。
recover-cascade还会重建被二进制日志中未记录的ON DELETE CASCADE操作删除的子行。DBTrail 负责生成 SQL;由你检查并执行。参见 查询与恢复。 - 验证恢复结果。
bintrail verify通过两个快照和索引进行检查,不会触碰源数据,并确认恢复操作能否还原数据。bintrail status会标记采集过程无法弥补的任何缺口。参见 验证。 - Web 界面和 MCP。 添加服务、安排快照并在浏览器中浏览变更。连接 Claude Desktop 或任何 MCP 客户端,用日常语言提问。所有工具均为只读。参见 5 分钟指南。
无需连接你的任何数据,30 秒即可试用时间回溯:
docker run --rm -p 6033:6033 ghcr.io/dbtrail/bintrail-demo
参见演示图片。
限制
可信赖的副本,前提是你清楚它的边界。
- 不具备高可用性。 你的应用不会指向这个副本。 不会有任何服务故障转移到它。
- 不是你的备份。 历史记录从安装之日开始。请保留 物理备份。
- 默认延迟几分钟,而不是几秒。 副本按你设置的 时间表刷新,SQL 端口也会从副本响应。你也可以在网页界面中为每台 服务选择实时模式,该模式还会读取采集过程中已编入索引的数据, 通常只延迟几秒,但会占用一些内存并降低速度。
- 需要使用 ROW 格式且包含完整行映像的 binlog。
binlog_format=ROW和binlog_row_image=FULL。bintrail doctor会检查这两项并打印修复方法 (在 RDS 和 Aurora 上,请在参数组中设置)。 - 某些变更会触发全量读取。 添加、删除、重命名或更改列类型,或对
表执行
TRUNCATE、DROP或RENAME,会暂停定期更新,直到 DBTrail 再次 读取数据库,每天最多一次。读取期间会短暂加锁:开始时会加全局读锁; 在 RDS 和 Aurora 上,则会锁定正在读取的表。新表会通过单独读取加入。 索引及其他日常变更不会触发全量读取。 - 历史记录需要存储桶。 没有 S3 时,行历史记录默认保留 48 小时
(可通过
--rotate-retain更改)。副本本身会保留:本地磁盘上每张表 最新的 3 个快照。 - MySQL 9.6 之前的版本和 MariaDB 中的级联删除。 外键删除的行
不会写入 binlog。
recover-cascade可以重建其中大部分行,而副本会保留这些行, 直到 DBTrail 下次全量读取数据库。 - 不是 MySQL 服务。 报告在 DuckDB 中运行,而不是通过 MySQL 客户端生成。 可选的 MySQL 端口(Beta 版,不支持 TLS)只会回答某行或某张表在过去某个时刻 的状态,或两段时间之间发生了什么变化。
- 由你负责运维。 DBTrail 及其小型索引 MySQL 都运行在你的 机器上。磁盘和备份由你负责。
完整列表:限制。
支持范围
| 源 | 分析型副本 | 行历史记录和撤销 |
|---|---|---|
| MySQL 8.0, 8.4 | 是 | 是 |
| Percona Server for MySQL 8.0, 8.4 | 是 | 是 |
| Amazon RDS for MySQL | 是(已验证) | 是(已验证) |
| Amazon Aurora MySQL | 是(已验证) | 是(已验证) |
| Google Cloud SQL for MySQL | 应可使用,请报告问题 | 应可使用 |
| MariaDB 10.11+,包括 Amazon RDS for MariaDB | 是 | 是。参见 MariaDB 源 |
| PostgreSQL 14+ | 仅支持一次性复制,尚不支持定期更新 | Beta 版。参见 PostgreSQL 源 |
DBTrail 从不需要磁盘上的 binlog 文件,因此可以用于托管云数据库。
安装
你需要在运行查询的机器上安装 Docker Compose 和 DuckDB。
curl -fsSL https://raw.githubusercontent.com/dbtrail/dbtrail/main/install.sh | sh
此命令会下载 Docker Compose 配置栈、启动服务、等待 DBTrail 响应,并打印后续步骤。
- 登录。 打开 **http://127.0.0.1:8090**,创建用户名和密码,然后点击 Create & sign in。
- 连接。 点击 + Add server,输入 MySQL 的主机和端口,然后点击 Find it。表单会显示用于创建 DBTrail 用户的 SQL。在 MySQL 上运行该 SQL,然后点击 I ran it。DBTrail 会检查其余配置并自动启动。
- 进行首次更改。 在 MySQL 上更改一行数据。该更改会在一分钟内显示在 Overview 的 Recent changes 下方,并附带一个 Undo,可用于写入撤销该更改的 SQL。
- 创建首份副本。 在 Snapshots 页面点击 Read database now。通常,这是 DBTrail 唯一一次直接读取你的表。
- 设置计划。 在 Snapshots 页面的 Settings 标签下,找到 Update the copy,选择更新频率(例如每 5 分钟一次),然后点击 Turn on。首次运行后的每次运行都会应用已记录的更改,而不是读取源数据库。
- 查询副本。 在 Snapshots 页面点击 Download,然后点击 Download the data。解压
.tar.gz文件,并在快照文件夹中运行duckdb -init views.sql。若要读取持续更新的副本,请参阅使用 DuckDB 查询。
更喜欢使用命令行?请参阅命令行快速入门。
开发者
DBTrail 由 Daniel Guzman-Burgos 开发,他曾任 Percona 的 MySQL 技术负责人。
文档
隐私
bintrail 是 DBTrail 的命令行工具,完全在你的基础设施中运行。你的数据库数据绝不会离开你的基础设施:包括行数据、架构、表名、查询、主机名、DSN 或文件路径。
官方发布版本确实会报告仅包含元数据的使用统计信息:运行了哪个命令、是否成功、粗略的错误类别,以及你的版本和平台。默认启用,只需一行即可关闭:
bintrail telemetry off # or: DO_NOT_TRACK=1, BINTRAIL_TELEMETRY=off
bintrail telemetry show # prints what would be sent; sends nothing
不会存储或传输任何类型的标识符,因此无法将这些统计信息与你或你的机器关联起来。你自行构建的二进制文件未编译任何报告地址,因此无法发送任何内容。TELEMETRY.md 详细说明了每个字段、每项控制措施,以及用于确保两者都符合要求的 CI 测试。
隐私政策涵盖 Claude Desktop 扩展(.mcpb),该扩展不会报告任何信息;还介绍了 AI 客户端查询你的部署时数据的流转方式。
许可证
Apache-2.0:可免费用于任何用途,包括商业用途和生产环境。 欢迎贡献;请参阅 CONTRIBUTING.md(需要签署 CLA, 首次提交 PR 时会自动提示)。
希望由他人为你运营索引服务(配置容量、备份、升级,并提供全天候值守),而不是自行运行?这就是 dbtrail.com 提供的托管服务。SUPPORT.md 说明了自行部署与托管服务的区别。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。