TiDB Lightning 断点续传

    大量的数据导入一般耗时数小时至数天,长时间运行的进程会有一定机率发生非正常中断。如果每次重启都从头开始,就会浪费掉之前已成功导入的数据。为此,TiDB Lightning 提供了“断点续传”的功能,即使 tidb-lightning 崩溃,在重启时仍然接着之前的进度继续工作。

    本文主要介绍 TiDB Lightning 断点续传的启用与配置、断点的存储,以及断点续传的控制。

    TiDB Lightning 支持两种存储方式:本地文件或 MySQL 数据库。

    • driver = "file",断点会存放在一个本地文件,其路径由 dsn 参数指定。由于断点会频繁更新,建议将这个文件放到写入次数不受限制的盘上,例如 RAM disk。

    目标数据库在导入期间会有大量的操作,若使用目标数据库来存储断点会加重其负担,甚至有可能造成通信超时丢失数据。因此,强烈建议另外部署一台兼容 MySQL 的临时数据库服务器。此数据库也可以安装在 的主机上。导入完毕后可以删除。

    tidb-lightning 因不可恢复的错误而退出(例如数据出错),重启时不会使用断点,而是直接报错离开。为保证已导入的数据安全,这些错误必须先解决掉才能继续。使用 tidb-lightning-ctl 工具可以标示已经恢复。

    1. tidb-lightning-ctl --checkpoint-error-destroy='`schema`.`table`'

    该命令会让失败的表从头开始整个导入过程。选项中的架构和表名必须以反引号 (` ) 包裹,而且区分大小写。

    • 如果导入 `schema`.`table` 这个表曾经出错,这条命令会:

      1. 将断点重设到“未开始”的状态。

    传入 “all” 会对所有表进行上述操作。这是最方便、安全但保守的断点错误解决方法:

    1. tidb-lightning-ctl --checkpoint-error-ignore='`schema`.`table`' &&
    2. tidb-lightning-ctl --checkpoint-error-ignore=all

    如果导入 `schema`.`table` 这个表曾经出错,这条命令会清除出错状态,如同没事发生过一样。传入 “all” 会对所有表进行上述操作。

    1. tidb-lightning-ctl --checkpoint-dump=output/directory

    将所有断点备份到传入的文件夹,主要用于技术支持。此选项仅于 driver = "mysql" 时有效。