我们在将mysql的历史数据同步到tidb,一般会使用mydumper将mysql的历史数据导出,然后使用loader将数据导入到tidb中,现有如下需求mysql数据库A和数据库B中的所有表的历史数据如何同步到TiDB的数据库A中去,这个应该怎么操作呢?貌似loader不支持在导入mysql数据库中的数据到tidb时重新制定数据库名的,请大佬指教
支持的,loader 配置文件中有路由配置规则, 导入时可以重新制定数据库名,但是要注意 A 库中的表和 B 库中的表不能有冲突的表名。
[[route-rules]]
pattern-schema = "example_db"
target-schema = "example_db"
好的,3q
大佬,我在导入的时候报
run table schema failed - dbfile /tonder/server/backup/reconciliation/reconciliation.tc_thirdpart_payment_order_201904-schema.sql
我的导入配置文件如下:
我从mysql导出的文件如下
文件里面的内容方便的话,发一下,另外,报错能发多一些吗 ? 现在是什么情况,a 库 成功导入,b 库修改库名导入失败?
好的,现在我从mysql库reconciliation中导出数据成功,然后按照上面的配置导入tidb库tonder失败 那个schema在客户端能执行成功
报错是因为这个
platform_create_time
timestamp NOT NULL DEFAULT ‘1970-01-01 00:00:01’ COMMENT ‘平台代付订单创建时间’,
但是这条语句我使用客户端sequel pro直接能执行成功的,没有报错,使用loader一直会报
Invalid default value for ‘platform_create_time’
检查下上下游 sql_mode,确保下游 sql_mode 和上游一致。
好的,我看看
我看了下两边的sql_mode是一模一样的 STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
辛苦提供下 下游 tidb 版本以及 loader 版本,手动将数据插入到下游检查下是否有问题,如果有问题,辛苦再提供下表结构以及数据。
tidb版本: 5.7.25-TiDB-v3.0.1
mysql版本:5.7.26-log
loader版本: Release Version: v1.0.0-68-g73dccdc
数据是可以手动插入下游的
我还发现另外一个问题,mysql中的
platform_create_time
timestamp NOT NULL DEFAULT ‘1970-01-01 08:00:01’ COMMENT ‘平台代付订单创建时间’,
通过loader导入后在tidb这边是这样的
platform_create_time
timestamp NOT NULL DEFAULT ‘1970-01-01 00:00:01’ COMMENT ‘平台代付订单创建时间’,
难道是时区的问题?
可以根据 mydumper 导出的表结构确认下,另外手动插入数据成功,loader 导入数据失败,感觉是不太正常。再执行 loader 试试呢?
tidb时区
time_zone +00:00
system_time_zone CST
mysql时区
system_time_zone CST
time_zone SYSTEM
这个会有影响吗?
mydumper表名正则感觉有问题 -x tc_payment_order_* 这种可以吗?
手动测试一下吧
我手动能创建成功,我看到mydumper有转换时区
/*!40101 SET NAMES binary*/;
/*!40014 SET FOREIGN_KEY_CHECKS=0*/;
/*!40103 SET TIME_ZONE='+00:00' */;
可以修改时区保持一致看下,看起来是这个原因造成的。