使用loader导入数据,正常的SQL语句报[invalid insert sql]错误

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:3.0.9
  • 【问题描述】:使用mydumper导出的SQL文件在使用loader导入的时候报错退出

错误: [fatal] restore data file (ation_05.status.000000033.sql) failed, err: [invalid insert sql][sql]INSERT IGNORE INTOstatusVALUES('2019-05-26','*',*,0,0,0,0,0,'2019-07-24 14:22:55','2019-08-20 02:54:36'),('2019-05-26','*',0,0,0,0,0,0,'2019-07-24 14:22:55','2019-08-20 02:54:36');

执行的SQL语句是一个很长的批量插入语句,在TiDB上执行是可以成功的。而且我重启loader的话有可能会成功。

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

您好,目前 loader 的设计是 loader 会在sql 里找 INSERT INTO,如果找不到(里面是 INSERT IGNORE INTO)就会报这个错。而实际上用日志输出或dump的sql文件内的sql去目标库执行insert ignore语句是完全没有问题的。另外不会在 loader 上面支持这个了。lightning 的 tidb backend 有 ignore 语义的支持。可以参考下。

tidb-lighting backend 方式不会影响集群的正常写入么,不会 switch-mode 么

你好, TiDB Lightning 支持 Importer-backend(默认)和 TiDB-backend 两种后端,两者导入数据的区别如下:

  • Importer-backendtidb-lightning 先将 SQL 或 CSV 数据编码成键值对,由 tikv-importer 对写入的键值对进行排序,然后把这些键值对 Ingest 到 TiKV 节点中。
  • TiDB-backendtidb-lightning 先将数据编码成 INSERT 语句,然后直接在 TiDB 节点上运行这些 SQL 语句进行数据导入。

由于是从 tidb 端通过 sql 导入数据,所以 tidb-backend 模式的 tidb lighting 是不会影响集群的。所以依旧不涉及 switch-mode 。

此问题已结束,麻烦请开贴提问~