在数据同步场景中,上游数据库可能是任何关系型数据库,异构数据库之间的同步目前还没有一款通用的工具能够很好的适配所有的关系型数据库。异构数据库之间的同步也有比较多的数据同步工具。传统数据库市场中, Db2 有一定的占有率,当这些用户在考虑数据迁移到 TiDB 上时如何选择合适的工具是本章的主要内容。Db2 根据运行平台的不同被分为 Db2 for LUW、Db2 for i(AS/400)、Db2 for z/OS(Mainframe) 。当数据源是 Db2 for LUW 时,可以使用 IBM CDC 或 OGG 做同步工具;当数据源是 Db2 for i 或 Db2 for z/OS 时,只能用 IBM CDC 做同步工具。本章节描述的是 Db2 for i 作为数据源时,使用 CDC 同步数据到 TiDB 的案例,可供所有计划使用 IBM CDC 工具同步数据到 TiDB 的用户参考。
IBM 公司为 Db2 的数据同步做了一套完整的工具,初期这款工具被命名为 InfoSphere Data Replication 简称 IIDR ,IIDR 有多个引擎,包括 Change data capture (CDC) Replication 、 Q Replication 和 SQL Replication ,在 Db2 for i 同步数据到 TiDB 的场景中,主要用到的是它的 Change data capture (CDC) Replication 引擎,所以文中前面提到的 IBM CDC 等价于 IIDR。
其软件架构如下图所示:
Supported source databases | Supported target databases and middleware applications |
---|---|
IBM??Db2? for Linux, UNIX and Windows (LUW) | IBM?Db2 for Linux, UNIX and Windows (LUW) |
IBM?Db2 for i | IBM?Db2 for i |
IBM?Db2 for z/OS? | IBM?Db2 for z/OS |
IMS | IBM?InfoSphere? DataStage? |
Microsoft SQL Server | Microsoft SQL Server |
Oracle | CDC Replication Engine for FlexRep |
Sybase?1 | Netezza? |
Informix??1 | Oracle |
Db2 on Cloud?(formerly dashDB? for Transactions)?2 | Sybase?1 |
VSAM | Informix?1 |
PostgreSQL | CDC Replication Engine for Event Server?1 |
Db2 Warehouse on Cloud?(formerly dashDB for Analytics)?3 | IBM Cloudant? |
Db2 Warehouse?(formerly dashDB Local)?3 | Apache? Hadoop |
MySQL | Apache Kafka |
Db2 Warehouse on Cloud?(formerly dashDB for Analytics) | |
Db2 on Cloud?(formerly dashDB for Transactions)?2 | |
Db2 Warehouse?(formerly dashDB Local) | |
IBM MQ for z/OS (using Classic CDC for z/OS) | |
Teradata | |
Microsoft Azure SQL Database | |
Microsoft Azure SQL Database Managed Instance | |
IBM Integrated Analytics System |
下面我们以一个实际案例来介绍如何将 Db2 for i 中的数据同步到 TiDB 上。
以上图的生产环境架构为例,上游是一个核心系统,使用的是IBM商业平台,生产和备份平台之间使用了 OMS 同步,IIDR 同步的源端为备机数据库,目标端为 TiDB 。为保证高可用,在下游的另外一台服务器上部署了 IIDR 软件作为备用节点。
关于 IIDR 的部署安装大家可以参考官网,本文不做重点介绍。这里主要说明一下 IIDR 的下游为 TiDB 时,在部署和使用过程中需要注意的点。
因为 TiDB 并不在 IIDR 官方的支持列表中,所以在下游安装时,我们要选择 FlexRep 如下图所示:
IIDR 需要借助 MySQL 驱动通过 JDBC 的方式将数据写入 TiDB 中,需要提前下载 MySQL 驱动,并在创建订阅时选择该驱动,如下图所示:
参数 | 值 |
---|---|
convert_not nullable_column | true |
events_max_retain | 10000 |
global_conversion_not_possible_warning | false |
global_max_batch_size | 25 |
global_shutdown_after_no_heartbeat_reponse_minute | 10 |
Implicit_transformation_warning | true |
jdbc_refresh_commit_after_max_operation | 4000 |
Mirror_commit_after_max_operations | 4000 |
Mirror_global_disk_quota_gb | 9223372036854775807 |
Mirror_interim_commit_threshols | 100 |
Userexit_max_lob_size_kb | 2097151 |
Mirror_commit_on_transaction_boundary | False |
IIDR 在同步全量数据之前,需要在 TiDB 侧创建好表结构,下表是 Db2 for i 到 TiDB 时表字段对应关系:
Db2字段类型 | TiDB字段类型 |
---|---|
L | date |
T | time |
Z | timestamp(6) |
A | varchar |
P | Decimal |
S | decimal |
O | varchar |
IIDR 是一款能够比较好的将 Db2 for i 的数据同步到 TiDB 的工具,在同步过程中如遇到上述配置还解决不了的问题,请联系 IIDR 官方或者 TiDB 官方,具体问题具体分析解决。