mcpField
D
dbtrail

dbtrail

远程服务
github.com/dbtrail数据库65今天更新
代码仓库

关于 dbtrail

DBTrail 将 MySQL 的行变更记录到 Parquet 分析副本,并保留历史以供查询和恢复。适合需要在生产数据库之外运行分析、追溯行版本或生成撤销 SQL 的团队。

主要功能

  1. 01从 binlog 捕获行变更
  2. 02生成 Parquet 分析副本
  3. 03通过 DuckDB 查询副本
  4. 04查看历史行版本
  5. 05生成精确恢复 SQL
  6. 06浏览器界面管理快照与变更

适用场景

  1. 01将报表查询移出 MySQL 主库
  2. 02检查某行在过去时点的状态
  3. 03为误操作生成撤销 SQL

MCP 相关

DBTrail 提供 MCP 工具,让 Claude Desktop 或其他 MCP 客户端以自然语言查询部署中的数据。所有工具均为只读。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://api.dbtrail.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

DBTrail:面向 MySQL 的开源分析型副本。读取 binlog,将 Parquet 写入你的存储桶,并使用 DuckDB 查询。

DBTrail 将你的 MySQL 表保存为由你掌控的 Parquet 文件,数据仅比源端延迟几分钟,并保留每一行的所有版本。使用 DuckDB 查询这些文件。生产环境不会执行这些查询。

Release License CI

$ 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 之外。

工作原理

  1. 首次复制时只读取一次表数据(使用 mydumper)。
  2. 此后只读取 binlog。 DBTrail 通过复制协议连接,就像副本一样。不需要插件,不需要在数据库主机上运行 Agent,也不需要触发器。因此 Amazon RDS 和 Aurora 都能使用。
  3. 按你的计划更新副本。 DBTrail 将记录的变更合并到新的 Parquet 快照中,更新频率可以是每 5 分钟一次,也可以是每天一次。除非表结构发生变化,否则不会再次读取源端(参见限制)。
  4. 使用 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 分钟刷新一次。六条报表查询的总耗时:

查询运行位置总耗时
MySQL22 min 28 s
ClickHouse(由 Airbyte CDC 提供数据)12.6 s
DBTrail + DuckDB4.6 s
MyDuck Server2.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 界面或 reconstruct CLI 查看任意行或表在过去某个时刻的状态。可选的 MySQL 端口(beta)支持从任何 mysql 客户端使用 AS OF SQL 查询相同内容。参见 时间回溯 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 响应,并打印后续步骤。

  1. 登录。 打开 **http://127.0.0.1:8090**,创建用户名和密码,然后点击 Create & sign in。
  2. 连接。 点击 + Add server,输入 MySQL 的主机和端口,然后点击 Find it。表单会显示用于创建 DBTrail 用户的 SQL。在 MySQL 上运行该 SQL,然后点击 I ran it。DBTrail 会检查其余配置并自动启动。
  3. 进行首次更改。 在 MySQL 上更改一行数据。该更改会在一分钟内显示在 Overview 的 Recent changes 下方,并附带一个 Undo,可用于写入撤销该更改的 SQL。
  4. 创建首份副本。 在 Snapshots 页面点击 Read database now。通常,这是 DBTrail 唯一一次直接读取你的表。
  5. 设置计划。 在 Snapshots 页面的 Settings 标签下,找到 Update the copy,选择更新频率(例如每 5 分钟一次),然后点击 Turn on。首次运行后的每次运行都会应用已记录的更改,而不是读取源数据库。
  6. 查询副本。 在 Snapshots 页面点击 Download,然后点击 Download the data。解压 .tar.gz 文件,并在快照文件夹中运行 duckdb -init views.sql。若要读取持续更新的副本,请参阅使用 DuckDB 查询。

更喜欢使用命令行?请参阅命令行快速入门。

开发者

DBTrail 由 Daniel Guzman-Burgos 开发,他曾任 Percona 的 MySQL 技术负责人。

文档

入门参考运维
安装使用 DuckDB 进行分析部署 · 容量
入门页面 · 命令行快速入门转储与基线 · Iceberg 导出轮换与状态
DBA 指南查询与恢复 · 时间旅行 SQLDocker
30 秒演示验证恢复 · Web 界面上传到 S3 · S3 IAM 策略 · 升级
限制流式处理 · 索引 · DDL 跟踪服务身份
连接 AI 助手 · MCP 服务Parquet 调试
MariaDB 数据源 · PostgreSQL 数据源

隐私

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 说明了自行部署与托管服务的区别。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。