从 CSV 文件迁移数据到 TiDB

    TiDB Lightning 支持读取 CSV 格式的文件,以及其他定界符格式,如 TSV(制表符分隔值)。对于其他“平面文件”类型的数据导入,也可以参考本文档进行。

    第 1 步: 准备 CSV 文件

    将所有要导入的 CSV 文件放在同一目录下,若要 TiDB Lightning 识别所有 CSV 文件,文件名必须满足以下格式:

    • 包含整张表数据的 CSV 文件,需命名为 。
    • 如果一张表分布于多个 CSV 文件,这些 CSV 文件命名需加上文件编号的后缀,如 ${db_name}.${table_name}.003.csv。数字部分不需要连续,但必须递增,并且需要用零填充数字部分,保证后缀为同样长度。

    CSV 文件自身未包含表结构信息。要将 CSV 数据导入 TiDB,就必须为数据提供表结构。可以通过以下任一方法创建表结构:

    • 方法一:使用 TiDB Lightning 创建表结构。

      编写包含 DDL 语句的 SQL 文件如下:

      • 文件名格式为 ${db_name}.${table_name}-schema.sql,其内容需包含 CREATE TABLE 语句。
    • 方法二:手动在下游 TiDB 建库和表。

    第 3 步: 编写配置文件

    新建文件 tidb-lightning.toml,包含以下内容:

    导入文件的大小统一约为 256 MiB 时,TiDB Lightning 可达到最佳工作状态。如果导入单个 CSV 大文件,TiDB Lightning 在默认配置下只能使用一个线程来处理,这会降低导入速度。

    要解决此问题,可先将 CSV 文件分割为多个文件。对于通用格式的 CSV 文件,在没有读取整个文件的情况下,无法快速确定行的开始和结束位置。因此,默认情况下 TiDB Lightning 不会自动分割 CSV 文件。但如果你确定待导入的 CSV 文件符合特定的限制要求,则可以启用 模式。启用后,TiDB Lightning 会将单个 CSV 大文件分割为单个大小为 256 MiB 的多个文件块进行并行处理。

    严格格式的 CSV 文件中,每个字段仅占一行,即必须满足以下条件之一:

    • delimiter 为空;
    • 每个字段不包含 CR (\r)或 LF(\n)。

    如果你确认满足条件,可按如下配置开启 strict-format 模式以加快导入速度。

    第 5 步: 执行导入

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

    • 通过 grep 日志关键字 progress 查看进度,默认 5 分钟更新一次。
    • 通过监控面板查看进度,请参考 TiDB Lightning 监控

    导入完毕后,TiDB Lightning 会自动退出。查看日志的最后 5 行中会有 the whole procedure completed,则表示导入成功。

    注意:

    无论导入成功与否,最后一行都会显示 tidb lightning exit。它只是表示 TiDB Lightning 正常退出,不代表任务完成。

    如果导入过程中遇到问题,请参见 。

    若数据源为其他格式,除文件名仍必须以 .csv 结尾外,配置文件 tidb-lightning.toml 的 格式定义同样需要做相应修改。常见的格式修改如下:

    TSV:

    TPC-H DBGEN:

    探索更多