如何通过研究TiDB Lightning源码来修复遇到的bug?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3100个文字,预计阅读时间需要13分钟。
背景:上一篇文章《记一次简单的Oracle离线数据迁移至TiDB过程》中,讲述了使用Lightning导入csv文件到TiDB时发现的一个bug。这是一个过程。
Oracle源库中表名都是大写,经过前文所述的方法导入后,表名未发生变化。
背景上一篇《记一次简单的Oracle离线数据迁移至TiDB过程》说到在使用Lightning导入csv文件到TiDB的时候发现了一个bug,是这样一个过程。
Oracle源库中表名都是大写,经过前文所述的方法导入到TiDB后表名也是保持全大写,数据同步过程非常顺利。
第二天我把整套操作流程教给一位新手朋友,他就挑了一张表用来做实验,结果死活都不行。各种分析和重试都没有效果,就在快要懵逼的时候想到了这个大小写问题,把csv拉出来一看是个全小写的文件名,我尝试着把表名改成大写再导入一次,这次终于成功了。
原来,是这位小伙子用sqluldr2导出表数据的时候把文件名写死了,而且是个小写。。。
这里提一下TiDB表名大小写敏感相关的参数
lower-case-table-names,这个参数只能被设置成2,也就是存储表名的时候区分大小写,对比的时候统一转为小写。因此,TiDB中的表名建议使用全小写来命名。这个特性基本和MySQL是一致的,只是MySQL支持更多的场景,具体可以参考dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html
那么,说好的TiDB表名不区分大小写呢,怎么用了Lightning就失效了?
Bug重现上面说的还是有点抽象,我们通过如下的步骤重现一下。
这里我准备的TiDB测试版本是v5.2.2,和前面发现bug的版本一致,Lightning也使用配套的版本。我拿最新的master分支也能复现这个问题。
本文共计3100个文字,预计阅读时间需要13分钟。
背景:上一篇文章《记一次简单的Oracle离线数据迁移至TiDB过程》中,讲述了使用Lightning导入csv文件到TiDB时发现的一个bug。这是一个过程。
Oracle源库中表名都是大写,经过前文所述的方法导入后,表名未发生变化。
背景上一篇《记一次简单的Oracle离线数据迁移至TiDB过程》说到在使用Lightning导入csv文件到TiDB的时候发现了一个bug,是这样一个过程。
Oracle源库中表名都是大写,经过前文所述的方法导入到TiDB后表名也是保持全大写,数据同步过程非常顺利。
第二天我把整套操作流程教给一位新手朋友,他就挑了一张表用来做实验,结果死活都不行。各种分析和重试都没有效果,就在快要懵逼的时候想到了这个大小写问题,把csv拉出来一看是个全小写的文件名,我尝试着把表名改成大写再导入一次,这次终于成功了。
原来,是这位小伙子用sqluldr2导出表数据的时候把文件名写死了,而且是个小写。。。
这里提一下TiDB表名大小写敏感相关的参数
lower-case-table-names,这个参数只能被设置成2,也就是存储表名的时候区分大小写,对比的时候统一转为小写。因此,TiDB中的表名建议使用全小写来命名。这个特性基本和MySQL是一致的,只是MySQL支持更多的场景,具体可以参考dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html
那么,说好的TiDB表名不区分大小写呢,怎么用了Lightning就失效了?
Bug重现上面说的还是有点抽象,我们通过如下的步骤重现一下。
这里我准备的TiDB测试版本是v5.2.2,和前面发现bug的版本一致,Lightning也使用配套的版本。我拿最新的master分支也能复现这个问题。

