从 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,包含以下内容:

    关于配置文件更多信息,可参阅 TiDB Lightning 配置参数

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

    注意

    如果 CSV 文件不是严格格式,但 strict-format 被误设为 true,跨多行的单个完整字段会被分割成两部分,导致解析失败,甚至不报错地导入已损坏的数据。

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

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

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

    第 5 步:执行导入

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

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

    导入完毕后,TiDB Lightning 会自动退出。查看 tidb-lightning.log 日志末尾是否有 the whole procedure completed 信息,如果有,表示导入成功。如果没有,则表示导入遇到了问题,可根据日志中的 error 提示解决遇到的问题。

    从 CSV 文件迁移数据到 TiDB - 图2

    注意

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

    如果导入过程中遇到问题,请参见 TiDB Lightning 常见问题

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

    TSV:

    探索更多