我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用DataSync迁移数据到Gaussdb T

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用DataSync迁移数据到Gaussdb T

原文链接: https://www.modb.pro/db/22926?cyn

一、DataSync迁移数据简介

DataSync支持GaussDB 100(GaussDB T)在线迁移和Sybase、Oracle、MySQL、 GaussDB 100 V100R003C10、SQL Server离线迁移两种数据迁移方式。配置好源库以及目标库相关配置信息后,启动迁移工具即可,运行过程中会生成相关的日志文件和报告,便于用户进行日常的管理及维护。

DataSync实现功能如下所示:
数据导出:只支持离线迁移方式。
数据导入:只支持离线迁移方式。
数据导出+导入:支持离线迁移和在线迁移两种方式。
表结构校验:离线迁移和在线迁移时均需要进行表结构校验。用户可在执行数据 迁移之前单独进行表结构校验,也可以在执行数据迁移过程中由DataSync工具自 动进行表结构校验。

使用DataSync的限制条件如下:
1、使用时必须确保迁移数据库的服务器和被迁移数据库的服务器可以正常连接。
2、使用时需保证通过配置的IP、端口、用户名、密码能够正确连接数据库。
3、使用时用户需要评估目标数据库占用空间和割接过程中使用的空间是否满足。
4、 使用时确保已在运行迁移工具的设备安装JAVA,版本须为1.8及以上。
5、使用时确保当前运行迁移工具设备的IP已配置在源数据库和目标数据库的白名单。
6用户需要将需要导出的源数据库JDBC驱动放置在dependency-jars中且驱动包名需
要跟规定的一致,否则会导致连接数据库失败,或采用指定jar包路径的方式调用工具,
示例:

java -Xbootclasspath/a:/sybaseDriver/jconn4_sybase.jar:/sybaseDriver/bcprov-jdk16-1.46.jar jar DSS.jar

7、数据库密码不支持" “(空格)和”;"(分号),否则工具无法使用 zsql命令连接数据库。详情可查询GaussDB 100 V300R001用户手册密码相关章 节。 确保配置用户有权限执行相关操作,否则会导致运行工具达不到预期结果。配置 用户所需权限请参见表2-1。

8、data_path配置项中所有路径均需遵循迁移工具路径白名单规则:路径只允许包含 大小写字母、数字、’’, ‘/’, ‘:’, ‘-’, ‘_’,不能以’-'打头,不能同时包含 / 和 \

二、在线迁移示例

下面以MySQL在线迁移到gaussdb100为示例,oracle数据库同样可以实现在线迁移

源库是mysql示例:
可以在源数据库端执行,无需在目标端创建表结构,自动在目标库创建表结构,数据同步过去
请在配置cfg.ini流程前需要分别生成数据库服务器密文、数据库用户密文、目标端服务器密文
生成cfg.ini文件中需要配置的密码的密文。

在DSS.jar当前目录执行java -jar DSS.jar -pwd | -password password_type命令,然 后按提示输入明文密码,即可得到加密的密码。

其中password_type表示cfg.ini文件中要生成密文的密码类型。取值范围是:整数, [1,9]。具体含义如下:

– 1:导出数据库密码;

– 2:导入数据库密码;

– 3:导入服务器密码;

– 4:导出操作所使用数据文件所在的远程服务器密码;

– 5:导入操作所使用数据文件所在的远程服务器密码;

– 6:导出数据库生成truststore文件设置的密码;

– 7:导出数据库生成keystore文件设置的密码;

– 8:导入数据库生成truststore文件设置的密码;

– 9:导入数据库生成keystore文件设置的密码。 密码需根据类型逐个加密,不可重复复用。例如,如果导出数据库和导入数据库 密码相同,需要使用“java -jar DSS.jar -pwd | -password 1”和“java -jar DSS.jar -pwd | -password 2”命令分别对其进行加密。 示例:

dbuser@plat:~/gppTest/verf0603/DataSync> java -jar DSS.jar -password 1 
DataSync (1.1.0), From Huawei !
Copyright © Huawei Technologies Co , Ltd 2019 All Rights Reserved.

1、配置在线迁移流程

[root@192-168-188-155 config]# more cfg.ini{        "flow_type":3, -->  1:导出  2:导入  3:在线迁移        "export_db":{                "database_type":3, --> 2:Oracle。3:MySQL。6:GaussDB 100                "db":{                        "ip":"192.168.188.155",                        "username":"root",                        "password":"mfkoBUgy1NgfG51rZUlYmg==",
                        "port":3306,                        "db_name":"yf",                        "server_name":"",                        "trust_store":"",                        "trust_store_password":"",                        "key_store":"",                        "key_store_password":""
                }
        },        "import_db":{                "database_type":6,                "db":{                        "ip":"192.168.212.221",                        "username":"TEMPTEST",                        "password":"AMeijynMP4OvdRzZeA/Tiw==",
                        "port":1888,                        "trust_store":"",                        "trust_store_password":"",                        "key_store":"",                        "key_store_password":"",                        "table_space":"",                        "index_table_space":""
                },                "server":{                        "ip":"192.168.212.221",                        "username":"omm",                        "password":"u9ijn15bju6i2YJIXYU46w==",
                        "pub_key_file":"",                        "port":22
                }
        },
--->online在线迁移下面的路径全都不用填        "data_path":{                "export_local_path":"",                "export_remote_path":{                        "ip":"",                        "username":"",                        "password":"",                        "pub_key_file":"",                        "port":22,                        "path":""
                },                "import_local_path":"",                "import_remote_path":{                        "ip":"",                        "username":"",                        "password":"",                        "pub_key_file":"",                        "port":22,                        "path":""
                }
        },        "option":{                "column_separator":"|",                "row_separator":"\n",                "data_check_type":1,                "compression_before_translate":false,                "compress_with_zstd_mode":false,                "disable_foreign_key":true,                "check_ddl":true,                "nls_lang":"utf8",                "delete_file":true,                "ignore_lost_table":3,   
                "disable_trigger":true,                "check_obj_exists":true,                "ignore_sync_ddl":false,                "ignore_case_in_exc":false,                "multiple_schema":false,                "fetch_size":2000,                "disable_index":false,                "enlarge_charater_length":false,                "create_pk_and_index_after_import":false,                "max_table_in_ddl_file":0,

2、选择要迁移的源数据库和源表,映射到目标库

[root@192-168-188-155 config]# more exp_obj.ini yf.frame_att:TEMPTEST.FRAME_ATT
---------------------------------------    --------------------------------------
源数据库表结构                                              gaussdb 100表结构
MySQL库名和表名用小写                              gaussdb 100用户名和表名用大写

3、源端以root用户执行
执行在线迁移命令:

[root@192-168-188-155 DataSync]# java -jar DSS.jar -i config/exp_obj.ini                   DataSync (1.1.1), From Huawei !
Copyright © Huawei Technologies Co , Ltd 2019 All Rights Reserved. 
Start checking config.............................[ok]
Start syncing DDL.................................[ok]
Start converting environment......................[ok]
Start syncing data................................[ok]
Data syncing......................................[0/1]
Data sync completed...............................[1/1]
Start recovering envrionment......................[ok]
Start collecting results..........................[ok]
Task start time...................................[2019-12-31 13:51:19]
Task end time.....................................[2019-12-31 13:57:13]
Total spent time..................................[354.075s]
Export successful data (rows).....................[217]
Export failed data (rows).........................[0]
Export data failed table count....................[0]
Import successful data (rows).....................[217]
Import failed data (rows).........................[196389]
Import failed table(tables).......................[1]
Report details path...............................[./logs/reports_2019-12-31/13h-51m-19s/]
[root@192-168-188-155 DataSync]#

4、查看迁移报告,验证数据一致性
DataSync工具运行过程中会生成以下日志:
dss_error_log.log:记录工具运行时出现的异常以及错误日志,供维护人员定位分 析问题。
DDLReport.csv:迁移过程中如果失败可查看,此为表结构创建失败的表对象
dss_info_log.log:会记录迁移失败的表、问题sql可在此log排查

三、迁移过程中注意点

1、datasync是通过load方式迁移数据,只迁移表数据

2、在迁移前datasync会检查表结构信息,如有错误会中断迁移,有关表结构错误信息可查看DDLReport.csv

3、dss_info_log.log ---->迁移失败的表、问题sql可在此log排查

4、datasync在导入之前会做ddl表结构检查,如果有表ddl创建失败,导入过程就会被中断,这步比较关键,所以要排除掉有问题的表,再去导入,可通过命令
grep -E ‘,ERROR,|,FAILED,’ ./logs/reports_2020-01-02/13h-51m-15s/CreateTblReport.csv,过滤出失败的表(有时候需要注意下源表的表名大小写问题)并在exp_obj.ini排除掉即可。详细创建失败的原因在dss_error_log.log

5、如果之前因为ddl问题导入失败需要重新导入,可在gaussdb删除之前的schema,再重新datasync导入

6、迁移时某些源表有自增列,会创建失败

ERROR:[TEMPTEST.FRA_R Missing table creation Task] Build Table Errors,sql:CREATE TABLE TEMPTEST.FRA_R ( ROW_ID FLOAT AUTO_INCREMENT not null ,OUGUID VARCHAR(200 )    ,ROL
     EGUID VARCHAR(200 )    ,UPDATETIME CHAR(40 )    , PRIMARY KEY(ROW_ID) );reason:com.huawei.gauss.exception.GaussException: [errorCode=GS-00601, SQLState='28000', reason='errLine = 1, errC
     olumn = 52, errMsg=Sql syntax error: auto increment column ROW_ID only support int type,ioClient:@4082ba93', sql=CREATE TABLE TEMPTEST.FRAME_ROLE4OU ( ROW_ID FLOAT AUTO_INCREMENT not nul
     l ,OUGUID VARCHAR(200 )    ,ROLEGUID VARCHAR(200 )    ,UPDATETIME CHAR(40 )    , PRIMARY KEY(ROW_ID) ), sessionId=73]

7、如果mysql跟gaussdb在一台,需要以omm用户运行,文件目录要授权

2020-01-02 11:01:33 AM [Thread: synctask:8851 ][ Class:com.huawei.dss.syncmgr.importtask.LoadImportCommon >> Method: com.huawei.dss.syncmgr.importtask.LoadI
mportCommon.setSourceCount(LoadImportCommon.java:810) ]
ERROR:[.workflow_attac load import task]awk read data file lines failed, failed result : awk: fatal: cannot open file `/root
/dataMigration/yf1b_stdzwfw9_7_11/workflow_attachstorageconfig.dat' for reading (Permission denied)
2020-01-02 11:01:33 AM [Thread: synctask:8852 ][ Class:com.huawei.dss.syncmgr.importtask.LoadImportCommon >> Method: com.huawei.dss.syncmgr.importtask.LoadI
mportCommon.setSourceCount(LoadImportCommon.java:813) ]
ERROR:statusCode=-1;result=awk: fatal: cannot open file `/root/dataMigration/yf/workflow_at.dat' for reading (Permission de
nied)
2020-01-02 11:01:33 AM [Thread: synctask:8852 ][ Class:com.huawei.dss.syncmgr.importtask.LoadImportCommon >> Method: com.huawei.dss.syncmgr.importtask.LoadI
mportCommon.doImport(LoadImportCommon.java:160) ]
ERROR:[yf1b_stdzwfw9_7_11.workflow_attachstorageconfig load import task] task init failed
[root@database DataSync]# chown -R omm:dbgrp /opt/DataSync[omm@database 11h-18m-20s]$ java -jar DSS.jar -i config/exp_obj.ini

8、mysql在线迁移创建表的时候,gaussdb表字段大小会比源表略大

9、含有系统保留字会创建失败

2020-01-02 13:51:32 PM [Thread: main:17745 ][ Class:com.huawei.dss.envconvert.ddlvalidator.impl.DdlValidatorImpl >> Method: com.huawei.dss.envconvert.ddlval
idator.impl.DdlValidatorImpl.createHandler(DdlValidatorImpl.java:1806) ]
ERROR:[ADMIN.AUDIT_ONLINE_REGISTER Missing table creation Task] Build Table Errors,sql:CREATE TABLE ADMIN.AUDIT_ONLINE_REGISTER ( BelongXiaQuCode VARCHAR(200 )    ,OperateUserName VARCHAR(200 )    ,OperateDate DATE    ,Row_ID INTEGER    ,YearFlag VARCHAR(16 )    ,RowGuid VARCHAR(200 )  not null ,ACCOUNTGUID VARCHAR(200 )    ,ACCOUNTSTATUS INTEGER    ,LASTLOGINDATE DATE    ,LOGINID VARCHAR(200 )    ,PASSWORD VARCHAR(2000 )    ,IS_FIRSTLOGIN INTEGER    ,MOBILE VARCH
AR(200 )    ,PWDLEVEL VARCHAR(8 )    ,USERTYPE VARCHAR(40 )    ,USERNAME VARCHAR(200 )    ,IDNUMBER VARCHAR(200 )    ,AUTHETYPE VARCHAR(200 )    ,ISREALNAME VARCHAR(200 )    ,USERSOURCE VARCHAR(200 )    ,ISQYFR VARCHAR(200 )    ,QYISACTIVE VARCHAR(200 )    ,WXID VARCHAR(400 )    ,WBID VARCHAR(400 )    ,QQID VARCHAR(400 )    ,LOCK VARCHAR(4 )    ,YPTOKEN VARCHAR(200 )    ,openid VARCHAR(200 )    ,refreshtoken VARCHAR(200 )    ,PROFILEPIC VARCHAR(200 )    ,failedtim
es INTEGER    ,faileddate DATE    ,islock VARCHAR(200 )    ,COMPANYIDNUMBER VARCHAR(200 )    , PRIMARY KEY(RowGuid) );reason:com.huawei.gauss.exception.Gaus
sException: [errorCode=GS-00601, SQLState='28000', reason='errLine = 1, errColumn = 709, errMsg=Sql syntax error: invalid column name 'LOCK',ioClient:@38cee
291', sql=CREATE TABLE ADMIN.AUDIT_ONLINE_REGISTER ( BelongXiaQuCode VARCHAR(200 )    ,OperateUserName VARCHAR(200 )    ,OperateDate DATE    ,Row_ID INTEGER
    ,YearFlag VARCHAR(16 )    ,RowGuid VARCHAR(200 )  not null ,ACCOUNTGUID VARCHAR(200 )    ,ACCOUNTSTATUS INTEGER    ,LASTLOGINDATE DATE    ,LOGINID VARCH
AR(200 )    ,PASSWORD VARCHAR(2000 )    ,IS_FIRSTLOGIN INTEGER    ,MOBILE VARCHAR(200 )    ,PWDLEVEL VARCHAR(8 )    ,USERTYPE VARCHAR(40 )    ,USERNAME VARC
HAR(200 )    ,IDNUMBER VARCHAR(200 )    ,AUTHETYPE VARCHAR(200 )    ,ISREALNAME VARCHAR(200 )    ,USERSOURCE VARCHAR(200 )    ,ISQYFR VARCHAR(200 )    ,QYIS
ACTIVE VARCHAR(200 )    ,WXID VARCHAR(400 )    ,WBID VARCHAR(400 )    ,QQID VARCHAR(400 )    ,LOCK VARCHAR(4 )    ,YPTOKEN VARCHAR(200 )    ,openid VARCHAR(200 )    ,refreshtoken VARCHAR(200 )    ,PROFILEPIC VARCHAR(200 )    ,failedtimes INTEGER    ,faileddate DATE    ,islock VARCHAR(200 )    ,COMPANYIDNUMBER V
ARCHAR(200 )    , PRIMARY KEY(RowGuid) ), sessionId=59]

10、不在datasync 转换规则内的字段信息,也会失败

如下bit类型的字段在gaussdb里没有,可尝试改为BOOLEAN(以字符串'0'或者'1'形式输入)或者int类型
yf,portal_item,ADMIN,PORTAL_ITEM,ERROR,--,--,--,--,--
2020-01-02 13:51:32 PM [Thread: main:17243 ][ Class:com.huawei.dss.envconvert.ddlvalidator.impl.DdlValidatorImpl >> Method: com.huawei.dss.envconvert.ddlval
idator.impl.DdlValidatorImpl.getColStr(DdlValidatorImpl.java:1692) ]
ERROR:[ADMIN.PORTAL_ITEM Missing table creation Task] AUTOLOADSCRIPT column type:bit not in a type mapping file

11、CompleteReport.csv是导入完成之后的报告,用于显示导出与导入失败的表、失败的行数

[omm@database DataSync]$ java -jar DSS.jar -i config/exp_obj.ini                                        
DataSync (1.1.1), From Huawei !
Copyright © Huawei Technologies Co , Ltd 2019 All Rights Reserved. 
Start checking config.............................[ok]
Start syncing DDL.................................[ok]
Start converting environment......................[ok]
Start syncing data................................[ok]
Data syncing......................................[0/935]
Data syncing......................................[86/935]
Data syncing......................................[165/935]
Data syncing......................................[276/935]
Data syncing......................................[377/935]
Data syncing......................................[470/935]
Data syncing......................................[586/935]
Data syncing......................................[684/935]
Data syncing......................................[844/935]
Data sync completed...............................[935/935]
Start recovering envrionment......................[ok]
Start collecting results..........................[ok]
Task start time...................................[2020-01-02 15:02:15]
Task end time.....................................[2020-01-02 15:03:21]
Total spent time..................................[66.245s]
Export successful data (rows).....................[159689]
Export failed data (rows).........................[0]
Export data failed table count....................[0]
Import successful data (rows).....................[134979]
Import failed data (rows).........................[224956]
Import failed table(tables).......................[26]  
Report details path...............................[./logs/reports_2020-01-02/15h-02m-15s/]
[omm@database DataSync]$ pwd/opt/DataSync
[omm@database DataSync]$
其中Import failed table(tables).......................[26]  
 ---->来源于文件CompleteReport.csv中的 ",FAILED,"字段,表名在CompleteReport.csv中有26个有导入错误的表
例如:
实际报告导出、导入的行数有报错,实际导入失败行数不符合,源表明明没有那么多行数据,但是datasync生成的报告里有很多行
REPORTTYPE,SOURCEDB,TARGETDB,SOURCETBL,TARGETTBL,EXPORTSTART,EXPORTEND,EXPORTCOST(MS),EXPORTEDROWS,EXPORTFAILEDROWS,EXPORTRESULT,IMPORTSTART,IMPORTEND,IMPORTCOST(MS),IMPORTEDROWS,IMPORTFAILEDROWS,IMPORTRESULT,ALLCOSTS(MS),ISFKENABLED
dump&load,yf1b_stdzwfw9_7_11,ADMIN,cert_metadata_lyg,CERT_METADATA_LYG,2020-01-02 15:02:57,2020-01-02 15:02:57,95ms,4072,0,SUCCESSED,2020-01-02 15:02:57,2020-01-02 15:02:57,248ms,0,4072,FAILED,343ms,No ForeignKey

12、查看导入失败的一些表在

[omm@database ~]$ ll /home/omm/dataMigration/import_error_files/
total 28
-rw------- 1 omm dbgrp 195 Jan  2 15:02 cert_metadata_lyg.dat
-rw------- 1 omm dbgrp 201 Jan  2 15:03 cert_metadata_rd.dat
-rw------- 1 omm dbgrp 193 Jan  2 15:03 cert_metadata_rg.dat
-rw------- 1 omm dbgrp 193 Jan  2 15:02 cert_metadata_xy.dat
-rw------- 1 omm dbgrp 192 Jan  2 15:02 cert_metadata_yz.dat
-rw------- 1 omm dbgrp  69 Jan  2 15:03 jgzf_yearsj.dat
-rw------- 1 omm dbgrp 119 Jan  2 15:02 table_struct.dat
[omm@database ~]$ ll /home/omm/dataMigration/yf/
total 63168
-rw------- 1 omm dbgrp     2111 Jan  2 15:03 asudit_online_evaluat.dat
-rw------- 1 omm dbgrp   101454 Jan  2 15:02 asudit_project_docsnap.dat
-rw------- 1 omm dbgrp     3158 Jan  2 15:02 asudit_sp_business.dat
-rw------- 1 omm dbgrp    40147 Jan  2 15:03 asudit_task.dat

13、失败的表数据可通过load方式手动导入

[omm@database yf]$ zsql admin/admin_123@172.16.4.81:1888 -q -c "LOAD DATA INFILE '/home/omm/dataMigration/yf/table_struct.dat' INTO TABLE \"ADMIN\".\"TABLE_STRUCT2\"  FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'   columns enclosed by '\"' optionally ignore CHARSET=utf8 THREADS 10 ERRORS 0 "connected.
SQL> 6231 rows have been committed.
Complete the data load.
totally read rows: 6231
     ignored rows: 0
      loaded rows: 6231
   committed rows: 6231
       error rows: 0
        skip rows: 0

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用DataSync迁移数据到Gaussdb T

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么使用dbeaver进行数据迁移

要使用DBeaver进行数据迁移,你可以按照以下步骤操作:打开DBeaver并连接到源数据库和目标数据库。在DBeaver的主界面上,选择“数据库”菜单,然后选择“数据传输”。在数据传输向导中,选择源数据库连接和目标数据库连接。选择要迁移的
怎么使用dbeaver进行数据迁移
2024-03-14

如何使用 PHP 进行 MySQL 数据迁移?

php mysql 数据迁移指南:建立到源和目标数据库的连接。从源数据库提取数据。在目标数据库中创建匹配源表的结构。使用逐行插入逐行将数据从源数据库迁移到目标数据库。如何使用 PHP 进行 MySQL 数据迁移简介数据迁移是将数据从一个
如何使用 PHP 进行 MySQL 数据迁移?
2024-05-12

如何在 Golang 中使用数据库迁移?

在 golang 中使用数据库迁移可确保数据库与代码同步。可以使用 ent 或 gormigrate 等库执行迁移:使用 ent:安装 ent。生成迁移文件。运行迁移。使用 gormigrate:安装 gormigrate。创建迁移文件(含
如何在 Golang 中使用数据库迁移?
2024-05-14

如何使用 Phinx 在 PHP 中迁移数据库

构建现代 Web 应用程序通常涉及大量数据。 在开发和生产过程中管理这些数据(数据库)可能很多。如果有多个开发人员和多个必须手动实施更改的环境,则尤其如此。数据库迁移可帮助开发人员跨多个环境和开发人员轻松管理这些更改。在本篇文章中我们将介绍
如何使用 Phinx 在 PHP 中迁移数据库
2024-02-27

如何使用PHP数据库迁移工具Phinx

这篇文章给大家分享的是有关如何使用PHP数据库迁移工具Phinx的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.安装composer require nhzex/think-phinx2.执行php vendo
2023-06-29

编程热搜

目录