使用 Dumpling 和 TiDB Lightning 备份与恢复

    在备份与恢复场景中,如果需要全量备份少量数据(例如小于 50 GB),且不要求备份速度,你可以使用 Dumpling 从 TiDB 数据库导出数据进行备份,再使用 将数据导入至 TiDB 数据库实现恢复。更多备份与恢复的相关信息,参见使用 BR 备份集群与。

    操作系统:本文档示例使用的是若干新的、纯净版 CentOS 7 实例,你可以在本地虚拟化一台主机,或在供应商提供的平台上部署一台小型的云虚拟主机。TiDB Lightning 运行过程中,默认会占满 CPU,建议单独部署在一台主机上。如果条件不允许,你可以将 TiDB Lightning 和其他组件(比如 tikv-server)部署在同一台机器上,然后设置 region-concurrency 配置项的值为逻辑 CPU 数的 75%,以限制 TiDB Lightning 对 CPU 资源的使用。

    内存和 CPU:因为 TiDB Lightning 对计算机资源消耗较高,建议分配 64 GB 以上的内存以及 32 核以上的 CPU,而且确保 CPU 核数和内存 (GB) 比为 1:2 以上,以获取最佳性能。

    磁盘空间

    如果需要保存单次备份数据到本地磁盘,需要注意以下磁盘空间限制:

    • Dumpling 需要能够储存整个数据源的存储空间,即可以容纳要导出的所有上游表的空间。计算方式参考下游数据库所需空间
    • TiDB Lightning 导入期间,需要临时空间来存储排序键值对,磁盘空间需要至少能存储数据源的最大单表。

    说明:目前无法精确计算 Dumpling 从 TiDB 导出的数据大小,但你可以用下面 SQL 语句统计信息表的 data_length 字段估算数据量:

    目标 TiKV 集群必须有足够空间接收新导入的数据。除了标准硬件配置以外,目标 TiKV 集群的总存储空间必须大于数据源大小 × × 2。例如,集群默认使用 3 副本,那么总存储空间需为数据源大小的 6 倍以上。公式中的 2 倍可能难以理解,其依据是以下因素的估算空间占用:

    • 索引会占据额外的空间。
    • RocksDB 的空间放大效应。
    1. 运行以下命令,从 TiDB 导出全量数据至 Amazon S3 存储路径 s3://my-bucket/sql-backup?region=us-west-2

        Dumpling 默认导出数据格式为 SQL 文件,你也可以通过设置 --filetype 指定导出文件的类型。

        关于更多 Dumpling 的配置,请参考 。

      1. 导出完成后,可以在数据存储目录 查看导出的备份文件。

      1. 关于更多 TiDB Lightning 的配置,请参考 。

      2. 运行 tidb-lightning。如果直接在命令行中启动程序,可能会因为 SIGHUP 信号而退出,建议配合 nohupscreen 等工具,如:

        若从 S3 导入,则需将有权限访问该 Amazon S3 后端存储的账号的 SecretKey 和 AccessKey 作为环境变量传入 Lightning 节点。同时还支持从 读取凭证文件。

        1. export AWS_ACCESS_KEY_ID=${access_key}
        2. export AWS_SECRET_ACCESS_KEY=${secret_key}
        3. nohup tiup tidb-lightning -config tidb-lightning.toml > nohup.out 2>&1 &
      3. 导入开始后,可以通过 grep 日志关键字 progress 查看进度,默认 5 分钟更新一次。