外观
TiDB 增量备份
增量备份是指仅备份自上次备份以来发生变化的数据,与全量备份相比,具有备份时间短、存储空间占用小的优点。TiDB 支持通过 TiCDC 或 Binlog 进行增量备份,适用于需要频繁备份的场景。
增量备份架构
1. 基于 TiCDC 的增量备份
TiCDC 是 TiDB 提供的变更数据捕获工具,可以实时捕获 TiKV 中的数据变更,并将其输出到不同的下游系统。基于 TiCDC 的增量备份架构包括:
- TiCDC 集群:负责捕获 TiKV 中的数据变更
- 存储系统:用于存储增量备份数据,如 S3、GCS、HDFS 或本地文件系统
- 备份工具:将 TiCDC 捕获的变更数据转换为可恢复的备份格式
2. 基于 Binlog 的增量备份
TiDB Binlog 是 TiDB 早期提供的变更数据捕获工具,虽然已被 TiCDC 取代,但仍可用于增量备份。基于 Binlog 的增量备份架构包括:
- TiDB Binlog 集群:包括 Pump 和 Drainer 组件
- Pump:部署在每个 TiDB 节点,负责收集 TiDB 产生的 Binlog
- Drainer:负责聚合和处理 Pump 收集的 Binlog
- 存储系统:用于存储增量备份数据
增量备份准备
1. 环境要求
- TiDB 集群版本:推荐使用 TiDB 4.0 及以上版本
- 存储系统:支持 S3、GCS、HDFS 或本地文件系统
- 网络带宽:确保 TiCDC 或 TiDB Binlog 与存储系统之间有足够的网络带宽
- 存储空间:根据业务数据量增长情况,规划足够的存储空间
2. TiCDC 部署与配置
部署 TiCDC 集群
使用 TiUP 部署 TiCDC 集群:
bash
# 创建包含 TiCDC 的拓扑文件
cat > ticdc-topology.yaml << EOF
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
pd_servers:
- host: 10.0.1.1
- host: 10.0.1.2
- host: 10.0.1.3
tidb_servers:
- host: 10.0.1.4
- host: 10.0.1.5
tikv_servers:
- host: 10.0.1.6
- host: 10.0.1.7
- host: 10.0.1.8
ticdc_servers:
- host: 10.0.1.9
- host: 10.0.1.10
EOF
# 部署集群
tiup cluster deploy <cluster-name> <tidb-version> ticdc-topology.yaml --user <username> -p
启动集群
tiup cluster start <cluster-name>配置 TiCDC 变更数据输出
创建 TiCDC 同步任务,将变更数据输出到存储系统:
bash
# 创建 TiCDC 同步任务,输出到 S3
tiup cdc cli changefeed create --server=http://<ticdc-host>:8300 --sink-uri="s3://<bucket-name>/backup/incremental?endpoint=<s3-endpoint>&access-key=<access-key>&secret-access-key=<secret-key>" --changefeed-id="incremental-backup"
# 创建 TiCDC 同步任务,输出到本地文件系统
tiup cdc cli changefeed create --server=http://<ticdc-host>:8300 --sink-uri="file:///path/to/backup/incremental" --changefeed-id="incremental-backup"3. TiDB Binlog 部署与配置
部署 TiDB Binlog 集群
使用 TiUP 部署包含 TiDB Binlog 的集群:
bash
# 创建包含 TiDB Binlog 的拓扑文件
cat > binlog-topology.yaml << EOF
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
pd_servers:
- host: 10.0.1.1
- host: 10.0.1.2
- host: 10.0.1.3
tidb_servers:
- host: 10.0.1.4
- host: 10.0.1.5
tikv_servers:
- host: 10.0.1.6
- host: 10.0.1.7
- host: 10.0.1.8
pump_servers:
- host: 10.0.1.4
- host: 10.0.1.5
drainer_servers:
- host: 10.0.1.9
EOF
# 部署集群
tiup cluster deploy <cluster-name> <tidb-version> binlog-topology.yaml --user <username> -p
启动集群
tiup cluster start <cluster-name>增量备份策略设计
1. 备份周期设计
根据业务需求和数据变化频率,设计合理的增量备份周期:
- 高频备份:对于数据变化频繁的业务,建议每小时或每 30 分钟进行一次增量备份
- 中频备份:对于数据变化适中的业务,建议每 2-4 小时进行一次增量备份
- 低频备份:对于数据变化较少的业务,建议每 6-24 小时进行一次增量备份
2. 备份保留策略
根据业务数据的重要性和合规要求,设计合理的备份保留策略:
- 近期备份:保留最近 7-30 天的增量备份,用于快速恢复
- 中期备份:保留最近 1-3 个月的增量备份,用于历史数据查询
- 长期备份:将重要数据的增量备份归档,保留 6 个月以上,用于合规审计
3. 备份验证策略
定期验证增量备份的完整性和可恢复性:
- 自动验证:使用脚本定期验证备份文件的完整性
- 手动验证:定期进行恢复测试,确保备份数据可以正常恢复
- 监控告警:监控备份任务的执行状态,及时发现备份失败情况
增量备份操作
1. 使用 TiCDC 进行增量备份
创建增量备份任务
bash
# 创建 TiCDC 增量备份任务
tiup cdc cli changefeed create \
--server=http://<ticdc-host>:8300 \
--sink-uri="s3://<bucket-name>/backup/incremental?endpoint=<s3-endpoint>&access-key=<access-key>&secret-access-key=<secret-key>" \
--changefeed-id="incremental-backup" \
--start-ts=<start-ts> \
--config=ticdc-backup-config.toml配置文件示例(ticdc-backup-config.toml)
toml
[sink]
# 输出格式,支持 json、avro 等
format = "json"
# 是否输出事务信息
enable-txn = true
# 输出文件的滚动大小,默认 64MB
file-size = "64MB"
# 输出文件的滚动时间,默认 1h
flush-interval = "1h"查看备份任务状态
bash
# 查看所有 TiCDC 任务
tiup cdc cli changefeed list --server=http://<ticdc-host>:8300
# 查看指定任务的详细状态
tiup cdc cli changefeed query --server=http://<ticdc-host>:8300 --changefeed-id="incremental-backup"2. 使用 TiDB Binlog 进行增量备份
配置 Drainer 输出到文件
修改 Drainer 配置文件 drainer.toml:
toml
[syncer]
# 输出格式,支持 mysql、pb、file 等
dest-type = "file"
# 文件输出路径
dir = "/path/to/backup/incremental"
# 输出文件的滚动大小,默认 128MB
file-size = 128
# 输出文件的滚动时间,默认 3600s
flush-interval = 3600重启 Drainer 生效配置
bash
# 重启 Drainer 组件
tiup cluster reload <cluster-name> -R drainer增量备份恢复操作
1. 基于全量备份 + 增量备份的恢复
增量备份恢复需要先恢复全量备份,然后应用增量备份:
步骤 1:恢复全量备份
bash
# 使用 BR 恢复全量备份
tiup br restore full \
--pd="<pd-host>:2379" \
--storage="s3://<bucket-name>/backup/full" \
--ratelimit=128 \
--concurrency=64步骤 2:应用增量备份
根据增量备份的类型,选择不同的恢复方式:
使用 TiCDC 增量备份恢复
bash
# 使用 TiCDC 恢复工具应用增量备份
tiup cdc cli processor create \
--server=http://<ticdc-host>:8300 \
--changefeed-id="incremental-restore" \
--sink-uri="mysql://<user>:<password>@<tidb-host>:4000/" \
--config=ticdc-restore-config.toml使用 TiDB Binlog 增量备份恢复
bash
# 使用 binlogctl 恢复增量备份
tiup binlogctl drainer restore \
--data-dir="/path/to/backup/incremental" \
--pd-urls="<pd-host>:2379" \
--from-db="<source-db>" \
--to-db="<target-db>"2. 恢复到指定时间点
使用 TiCDC 恢复到指定时间点
bash
# 创建 TiCDC 恢复任务,恢复到指定时间点
tiup cdc cli changefeed create \
--server=http://<ticdc-host>:8300 \
--sink-uri="mysql://<user>:<password>@<tidb-host>:4000/" \
--changefeed-id="point-in-time-restore" \
--start-ts=<start-ts> \
--target-ts=<target-ts> \
--config=ticdc-restore-config.toml使用 TiDB Binlog 恢复到指定时间点
bash
# 使用 binlogctl 恢复到指定时间点
tiup binlogctl drainer restore \
--data-dir="/path/to/backup/incremental" \
--pd-urls="<pd-host>:2379" \
--from-db="<source-db>" \
--to-db="<target-db>" \
--stop-ts=<target-ts>增量备份监控与告警
1. 监控指标
- 备份任务状态:监控 TiCDC 或 TiDB Binlog 任务的运行状态
- 备份延迟:监控增量备份与实时数据的延迟情况
- 备份文件大小:监控增量备份文件的大小变化
- 备份成功率:统计备份任务的成功和失败次数
2. 告警配置
- 备份任务失败:当备份任务失败时,触发告警
- 备份延迟过高:当备份延迟超过阈值时,触发告警
- 备份文件过大:当增量备份文件过大时,触发告警
- 备份验证失败:当备份验证失败时,触发告警
3. 使用 Prometheus 和 Grafana 监控
TiCDC 和 TiDB Binlog 都提供了 Prometheus 监控指标,可以通过 Grafana 可视化监控:
- TiCDC 监控指标:
cdc_changefeed_checkpoint_ts、cdc_changefeed_processed_events等 - TiDB Binlog 监控指标:
binlog_pump_event_count、binlog_drainer_event_count等
增量备份最佳实践
1. 备份策略最佳实践
- 结合全量备份:定期进行全量备份,然后使用增量备份补充,形成完整的备份链
- 分层备份:根据数据的重要性,采用不同的备份频率和保留策略
- 多副本存储:将增量备份数据存储在多个地理位置,提高数据安全性
2. 性能优化最佳实践
- 合理配置备份周期:根据数据变化频率,调整备份周期,避免备份过于频繁影响系统性能
- 调整备份并发度:根据系统负载,调整备份任务的并发度
- 避开业务高峰:在业务低峰期进行增量备份,减少对业务的影响
3. 安全最佳实践
- 加密备份数据:对敏感数据的增量备份进行加密存储
- 访问控制:严格控制备份数据的访问权限,只有授权人员才能访问
- 审计日志:记录备份数据的访问和操作日志,便于审计
4. 灾难恢复最佳实践
- 定期恢复测试:定期进行灾难恢复测试,验证增量备份的可恢复性
- 恢复演练:每年至少进行一次完整的灾难恢复演练,包括全量备份和增量备份的恢复
- 恢复时间目标(RTO):根据业务需求,制定合理的恢复时间目标,并确保备份策略能够满足该目标
常见问题处理
1. TiCDC 备份任务失败
问题:TiCDC 备份任务失败,状态显示为
failed解决方法:检查 TiCDC 日志,查看具体失败原因,可能的原因包括网络连接问题、存储系统权限问题或配置错误问题:TiCDC 备份延迟过高 解决方法:增加 TiCDC 节点数量,调整 TiCDC 配置参数,如
worker-count、batch-size等
2. TiDB Binlog 备份任务失败
问题:Pump 或 Drainer 组件异常 解决方法:检查组件日志,重启异常组件,或增加组件数量
问题:Binlog 数据丢失 解决方法:检查 TiDB 配置,确保 Binlog 功能正常启用,定期验证 Binlog 数据的完整性
3. 增量备份恢复失败
问题:恢复过程中出现数据冲突 解决方法:检查恢复目标数据库的状态,确保目标数据库为空或与备份数据兼容
问题:恢复时间过长 解决方法:增加恢复任务的并发度,优化目标数据库的配置,或考虑使用并行恢复
常见问题(FAQ)
Q1: TiDB 增量备份支持哪些存储系统?
A1: TiDB 增量备份支持多种存储系统,包括 S3、GCS、HDFS、本地文件系统等,具体支持的存储系统取决于使用的备份工具。
Q2: 如何选择 TiCDC 和 TiDB Binlog 进行增量备份?
A2: 推荐使用 TiCDC 进行增量备份,因为 TiCDC 是 TiDB 4.0 及以上版本的推荐变更数据捕获工具,具有更高的性能和可靠性。TiDB Binlog 已逐渐被 TiCDC 取代,仅建议在旧版本 TiDB 集群中使用。
Q3: 增量备份可以恢复单个表吗?
A3: 是的,TiCDC 和 TiDB Binlog 都支持按表进行增量备份和恢复。在创建备份任务时,可以通过配置指定需要备份的表。
Q4: 如何监控增量备份的延迟情况?
A4: 可以通过 Prometheus 监控 TiCDC 或 TiDB Binlog 的延迟指标,如 cdc_changefeed_checkpoint_ts 或 binlog_drainer_checkpoint_ts,然后在 Grafana 中创建监控面板。
Q5: 增量备份数据的压缩方式有哪些?
A5: TiCDC 和 TiDB Binlog 都支持对备份数据进行压缩,支持的压缩算法包括 gzip、snappy、lz4 等。可以在配置文件中指定压缩方式。
Q6: 如何处理增量备份中的大事务?
A6: 对于大事务,可以调整备份工具的配置参数,如增加 batch-size 或 file-size,以提高大事务的处理能力。同时,建议在业务层面优化大事务,将其拆分为多个小事务。
Q7: 增量备份可以与全量备份自动结合吗?
A7: 是的,可以使用脚本或工具自动管理全量备份和增量备份的结合。例如,可以定期创建全量备份,然后自动创建基于该全量备份的增量备份任务。
Q8: 如何验证增量备份的完整性?
A8: 可以使用备份工具提供的验证命令,或编写脚本验证备份文件的完整性。同时,建议定期进行恢复测试,确保增量备份可以正常恢复。
