暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

mogdb学习-从6开始(MTK)

1100

写在前面

MTK是一种数据迁移工具,支持异构的数据迁移,比如从Oracle、DB2、Mysql中同步表结构和全量数据,MTK不支持增量同步,仅支持全量从一个静态库中同步所有的表结构和数据。

有这样一个现实场景,新老系统替换,由于设计和业务功能的改进,新老系统的数据库设计肯定不同,新系统需要承接老系统的数据,进行后续的业务处理以及查询统计,这个工作也叫“业务数据迁移”,本文所指的迁移都是业务数据迁移,而不是传统意义上的数据库产品改变。

一般情况下在进行业务迁移的时候需要一个迁移中间环境,这个环境的数据库产品可以与老系统数据库产品一致,也可以与新系统数据库产品一致,需要根据实际情况考虑使用哪一种,这个环境包括两类表,一类表是老系统的表,一类是新系统的表,下图描述了一个从老系统是DB2、中间环境是mysql或者db2、新系统是Mysql的业务迁移方案中的数据流转过程:

此例中我们的老系统使用Mysql数据库,新系统使用MogDB数据库,迁移中间环境使用MogDB数据库;具体如下表

老系统

中间环境

新系统

数据库产品

Mysql

MogDB

MogDB

数据流向汇总来说有以下几个大步骤:

  1. 老系统卸载数据
  2. 中间库加载老系统数据到老系统的表
  3. 中间库执行sql逻辑代码进行数据转换,并加工到新系统的表
  4. 导出中间库中新系统的表
  5. 生产环境导入加工后的数据

此次测试,我主要是测试步骤1和步骤2的内容,既通过MTK把全量数据从老系统加载到新系统

测试环境

Mysql

NODE1(主库)

NODE2(从库)

pkt_mogdb1

pkt_mogdb2

10.80.9.150

10.80.9.249

10.80.9.250

安装MTK

  1. 安装MTK

如果是从Oracle或者DB2同步到MogDB需要安装相应的客户端mysql不需要。

使用omm用户解压mtk安装包,并配置环境变量

[omm@pkt_mogdb1 software]$ cd /opt/mogdb/software

[omm@pkt_mogdb1 software]$ tar -zxvf mtk_2.4.4_linux_amd64.tar.gz

[omm@pkt_mogdb1 software]$ mv mtk_2.4.4_linux_amd64 mtk2.4.4

编辑环境变量,增加mtk环境变量

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/opt/mogdb/software/mtk2.4.4

  1. 修改MTK配置文件

方式一、在mtk解压目录中有一个example文件夹,里面有实例配置文件

[omm@pkt_mogdb1 example]$ ll

total 28

-rw------- 1 omm omm 3148 Jun 23 13:20 db22mysql.json

-rw------- 1 omm omm 3585 Jun 23 13:29 db22openGauss_file.json

-rw------- 1 omm omm 3740 Jun 23 13:20 db22openGauss.json

-rw------- 1 omm omm 2805 Jun 23 13:29 mysql2opengauss_file.json

-rw------- 1 omm omm 2775 Jun 23 13:21 mysql2opengauss.json

-rw------- 1 omm omm 2964 Jun 23 13:29 oracle2opengauss_file.json

-rw------- 1 omm omm 2988 Jun 23 13:20 oracle2opengauss.json

因为我们的是从Mysql到MogDB,因此复制一份mysql2opengauss.json进行修改

方式二、通过mtk config-gen命令交互式生成配置文件。

便于理解我选择了使用交互式方式生成配置文件

[omm@pkt_mogdb1 mtk2.4.4]$ mtk config-gen

✔ mysql #选择源数据库类型

Please input the mysql Database machine ip : 10.80.9.150 #源数据库地址

Please input the mysql Database port : 3306 #源数据库端口

Please input the mysql Database User : zkh #源数据库用户

Please input the mysql Database User Password : ●●●●●●●●●●● #源数据库密码

Please input the mysql Database Name : db_mysql #源数据库库名

✔ mogdb #目标数据库类型

Please input the mogdb Database machine ip : 10.80.9.249 #目标数据库ip

Please input the mogdb Database port : 26000 #目标数据库端口

Please input the mogdb Database User : zkh #目标数据库用户

Please input the mogdb Database User Password : ●●●●●●●●●●● #目标数据库密码

Please input the mogdb Database Name : db_mogdb #目标数据库库名

Please input the degree of parallelism: 2 #同步的使用并行度

Please input fetch Size: 1000 # 每次处理1000条

Please input batch size: 1000

Please input copy buffer size: 8

Please input reader buffer size: 8

Please input oracle select parallel: 2

✔ table #是同步表还是同步schema

Please input the Migrate tables,Separated by commas.(schema1.tab1,schema2.tab1): db_mysql.dump_tables_mysql

我这里的测试源表为dump_tables_mysql 数据量是600多万条

完成上述交互命令会打印出配置文件信息

{

"source": {

"type": "mysql",

"connect": {

"host": "10.80.9.150",

"user": "zkh",

"port": 3306,

"password": "Zkh12345678",

"dbName": "db_mysql"

},

"parameter": {

"charAppendEmptyString": false

}

},

"target": {

"type": "mogdb",

"connect": {

"host": "10.80.9.249",

"user": "zkh",

"port": 26000,

"password": "Zkh12345678",

"dbName": "db_mogdb"

},

"parameter": {

"parallelInsert": 1,

"dropExistingObject": false,

"truncTable": false,

"colKeyWords": {},

"objKeyWords": {},

"caseSensitive": 0,

"quoteMark": false,

"path": "./data/mysql",

"schemaPath": "",

"dataPath": "",

"fileType": "",

"fileSize": "",

"csvHeader": false,

"csvNullValue": "",

"csvFieldDelimiter": ",",

"csvOptionallyEnclosed": "\"",

"excludeSysTable": [],

"remapSchema": {},

"remapTable": {},

"remapTablespace": {},

"enableSyncTabTbsPro": false,

"enableSyncCompTabPro": false,

"timeFormat": "HH:MI:SS",

"dateFormat": "YYYY-MM-DD",

"dateTimeFormat": "YYYY-MM-DD HH24:MI:SS",

"noSupportPartTabToNormalTab": false,

"ignoreDB2PartInclusive": false,

"igNotSupportIntervalPart": false,

"igErrorData": false,

"enableBatchCommit": false,

"ignoreTabPartition": false,

"autoAddMaxvaluePart": false,

"autoAddMySQLAutoIncr": false,

"autoAddMySQLAutoIncrTabList": [],

"ignoreNotSupportDefault": false,

"replaceZeroDate": "",

"virtualColToNormalCol": false,

"virtualColConv": {},

"mySQLSkipErrorDateTimeData": false,

"ignoreTableDDLCompErr": false,

"convertPackageMethod": "",

"enableOgBlobClob": false,

"enableConvertSrid": false,

"defaultSrid": "4326",

"seqLastNumAddNum": 0,

"skipColumnType": {},

"skipColumnName": {},

"templateSeqName": "",

"charAppendEmptyString": false,

"tableOptions": {},

"indexOptions": {}

}

},

"limit": {

"parallel": 2,

"fetchSize": 1000,

"batchSize": 1000,

"bufferSize": 8,

"cpBufferSize": 8,

"oracleSelectParallel": 2,

"channelCacheNum": 10000,

"limit": 0

},

"object": {

"tables": [

"db_mysql.dump_tables_mysql"

],

"schemas": [],

"excludeTable": {

"MTK": [

"MTK_TAB1",

"MTK_TAB2"

],

"SYS": [

"TAB$",

"OBJ$"

]

},

"tableSplit": {

"MTK": {

"TAB_1": [

" rowid between 'AAAeoSAAEAAAACpAAA' and 'AAAeoSAAEAAAA4oEI/'",

" rowid between 'AAAeoSAAEAAAA4pAAA' and 'AAAeoSAAEAABVSoEI/'",

" rowid between 'AAAeoSAAEAABVSpAAA' and 'AAAeoSAAFAABOEoEI/'",

" rowid between 'AAAeoSAAFAABOEpAAA' and 'AAAeoSAAFAABOGIEI/'"

],

"TAB_2": [

"MOD(\"ID\",4)=0",

"MOD(\"ID\",4)=1",

"MOD(\"ID\",4)=2",

"MOD(\"ID\",4)=3"

],

"TAB_3": [

"MOD(`ID`,4)=0",

"MOD(`ID`,4)=1",

"MOD(`ID`,,4)=2",

"MOD(`ID`,4)=3"

]

}

}

},

"dataOnly": false,

"schemaOnly": false,

"disableTableDataComp": false,

"disableCollStatistics": false,

"reportFile": "./mtk_report",

"debug": false,

"disableIgnoreCase": false,

"disableSelectPart": false,

"disableFKCons": false,

"disableSyncIdxAfterData": false,

"disablePrintMigDataProgress": false

}

把信息保存到mtk.json中

  1. 运行MTK

负责直接运行mtk会报错,不存在licence

[omm@pkt_mogdb1 mtk2.4.4]$ ./mtk -c mtk.json

License File Not Found (default license.json)

read License failed: Config File "license" Not Found in "[/opt/mogdb/software/mtk2.4.4]"

Please use ./mtk license gen command to request

需要先申请license命令:mtk license gen,需要联网,但是我的虚拟机没有外网,难住我了,在这里感谢一下小墨同志,有困难找小墨。

[omm@pkt_mogdb1 mtk2.4.4]$ mtk license gen

License File Not Found (default license.json)

The License code is invalid, start applying

Email: zhangkh@yusys.com.cn

Start applying for email zhangkh@yusys.com.cn authorization.

Failure : Post "http://ymzspitwutgk0.license.enmotech.com/api/v1/license": dial tcp: lookup ymzspitwutgk0.license.enmotech.com on [::1]:53: read udp [::1]:37467->[::1]:53: read: connection refused

The application for authorization failed. Please apply for or replace the server manually.

也感谢官方大大,在gitee上提交问题,很快就回复

于是我下载了一个window版本的MTk,然后使用可以联网的机器重新申请了一个Lisence,然后等待邮件就可以了。

上传到服务器对应目录,需要注意文件权属应该是omm

重新运行mtk

[omm@pkt_mogdb1 mtk2.4.4]$ ./mtk -c mtk.json

成功了

观察过程中1秒大概1万条数据,最后看看600多万需要多长时间执行完成

总共需要了13分钟。如果把并行度再开大一些,应该会提升不少。

查看一下备库是否也同步过去了

从库同步也没有问题。

修改mtk.json修改如下两个参数

truncTable: true #如果数据存在则truncate

parallelInsert: 4 #并行插入进程数

"dataOnly": true #只同步数据

重新执行

[omm@pkt_mogdb1 mtk2.4.4]$ ./mtk -c mtk.json

开启了4个并行度,发现速度大大提升

只用了6分钟就导入了

最后

MTK在迁移过程中非常方便,可以指定一个schema,也可以指定表,如果目标库已经存在表了,也可以只迁移数据,并且在导入数据的时候可以选择truncate目标库中的表,MTK支持的参数还有很多,到时候有机会真正使用MogDB的时候再深入研究把。

MTk如果有个web界面操作就更完美了,因为最近刚测试完Oceanbase的OMS迁移工具,专业性降低,可操作性也提高了。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论