mysql数据库A和数据库B中的所有表的历史数据如何同步到TiDB的数据库A中?

我们在将mysql的历史数据同步到tidb,一般会使用mydumper将mysql的历史数据导出,然后使用loader将数据导入到tidb中,现有如下需求mysql数据库A和数据库B中的所有表的历史数据如何同步到TiDB的数据库A中去,这个应该怎么操作呢?貌似loader不支持在导入mysql数据库中的数据到tidb时重新制定数据库名的,请大佬指教

1赞

支持的,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' */;

可以修改时区保持一致看下,看起来是这个原因造成的。