使用DataSync迁移数据到Gaussdb T
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.jarjarDSS.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-jarDSS.jar-password1DataSync(1.1.0),FromHuawei!Copyright©HuaweiTechnologiesCo,Ltd2019AllRightsReserved.
1、配置在线迁移流程
[root@192-168-188-155config]#morecfg.ini{"flow_type":3,-->1:导出2:导入3:在线迁移"export_db":{"database_type":3,-->2:Oracle。3:MySQL。6:GaussDB100"db":{"ip":"192.168.188.155","username":"root","password":"mfkoBUgy1NgfG51rZUlYmg==",/*java-jarDSS.jar-password1--exportdatabase,这里使用命令生成数据库用户密文密码*/"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==",/*java-jarDSS.jar-password2--importdatabase,这里是生成gaussdb密文用户密码*/"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==",/*java-jarDSS.jar-password3--importserver-->这里是生成omm用户密文密码*/"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,/*注意下要使用在线迁移,这里需要改为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-155config]#moreexp_obj.iniyf.frame_att:TEMPTEST.FRAME_ATT-----------------------------------------------------------------------------源数据库表结构gaussdb100表结构MySQL库名和表名用小写gaussdb100用户名和表名用大写
3、源端以root用户执行
执行在线迁移命令:
[root@192-168-188-155DataSync]#java-jarDSS.jar-iconfig/exp_obj.iniDataSync(1.1.1),FromHuawei!Copyright©HuaweiTechnologiesCo,Ltd2019AllRightsReserved.Startcheckingconfig.............................[ok]StartsyncingDDL.................................[ok]Startconvertingenvironment......................[ok]Startsyncingdata................................[ok]Datasyncing......................................[0/1]Datasynccompleted...............................[1/1]Startrecoveringenvrionment......................[ok]Startcollectingresults..........................[ok]Taskstarttime...................................[2019-12-3113:51:19]Taskendtime.....................................[2019-12-3113:57:13]Totalspenttime..................................[354.075s]Exportsuccessfuldata(rows).....................[217]Exportfaileddata(rows).........................[0]Exportdatafailedtablecount....................[0]Importsuccessfuldata(rows).....................[217]Importfaileddata(rows).........................[196389]Importfailedtable(tables).......................[1]Reportdetailspath...............................[./logs/reports_2019-12-31/13h-51m-19s/][root@192-168-188-155DataSync]#
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_RMissingtablecreationTask]BuildTableErrors,sql:CREATETABLETEMPTEST.FRA_R(ROW_IDFLOATAUTO_INCREMENTnotnull,OUGUIDVARCHAR(200),ROLEGUIDVARCHAR(200),UPDATETIMECHAR(40),PRIMARYKEY(ROW_ID));reason:com.huawei.gauss.exception.GaussException:[errorCode=GS-00601,SQLState='28000',reason='errLine=1,errColumn=52,errMsg=Sqlsyntaxerror:autoincrementcolumnROW_IDonlysupportinttype,ioClient:@4082ba93',sql=CREATETABLETEMPTEST.FRAME_ROLE4OU(ROW_IDFLOATAUTO_INCREMENTnotnull,OUGUIDVARCHAR(200),ROLEGUIDVARCHAR(200),UPDATETIMECHAR(40),PRIMARYKEY(ROW_ID)),sessionId=73]
7、如果mysql跟gaussdb在一台,需要以omm用户运行,文件目录要授权
2020-01-0211:01:33AM[Thread:synctask:8851][Class:com.huawei.dss.syncmgr.importtask.LoadImportCommon>>Method:com.huawei.dss.syncmgr.importtask.LoadImportCommon.setSourceCount(LoadImportCommon.java:810)]ERROR:[.workflow_attacloadimporttask]awkreaddatafilelinesfailed,failedresult:awk:fatal:cannotopenfile`/root/dataMigration/yf1b_stdzwfw9_7_11/workflow_attachstorageconfig.dat'forreading(Permissiondenied)2020-01-0211:01:33AM[Thread:synctask:8852][Class:com.huawei.dss.syncmgr.importtask.LoadImportCommon>>Method:com.huawei.dss.syncmgr.importtask.LoadImportCommon.setSourceCount(LoadImportCommon.java:813)]ERROR:statusCode=-1;result=awk:fatal:cannotopenfile`/root/dataMigration/yf/workflow_at.dat'forreading(Permissiondenied)2020-01-0211:01:33AM[Thread:synctask:8852][Class:com.huawei.dss.syncmgr.importtask.LoadImportCommon>>Method:com.huawei.dss.syncmgr.importtask.LoadImportCommon.doImport(LoadImportCommon.java:160)]ERROR:[yf1b_stdzwfw9_7_11.workflow_attachstorageconfigloadimporttask]taskinitfailed[root@databaseDataSync]#chown-Romm:dbgrp/opt/DataSync[omm@database11h-18m-20s]$java-jarDSS.jar-iconfig/exp_obj.ini
8、mysql在线迁移创建表的时候,gaussdb表字段大小会比源表略大
9、含有系统保留字会创建失败
2020-01-0213:51:32PM[Thread:main:17745][Class:com.huawei.dss.envconvert.ddlvalidator.impl.DdlValidatorImpl>>Method:com.huawei.dss.envconvert.ddlvalidator.impl.DdlValidatorImpl.createHandler(DdlValidatorImpl.java:1806)]ERROR:[ADMIN.AUDIT_ONLINE_REGISTERMissingtablecreationTask]BuildTableErrors,sql:CREATETABLEADMIN.AUDIT_ONLINE_REGISTER(BelongXiaQuCodeVARCHAR(200),OperateUserNameVARCHAR(200),OperateDateDATE,Row_IDINTEGER,YearFlagVARCHAR(16),RowGuidVARCHAR(200)notnull,ACCOUNTGUIDVARCHAR(200),ACCOUNTSTATUSINTEGER,LASTLOGINDATEDATE,LOGINIDVARCHAR(200),PASSWORDVARCHAR(2000),IS_FIRSTLOGININTEGER,MOBILEVARCHAR(200),PWDLEVELVARCHAR(8),USERTYPEVARCHAR(40),USERNAMEVARCHAR(200),IDNUMBERVARCHAR(200),AUTHETYPEVARCHAR(200),ISREALNAMEVARCHAR(200),USERSOURCEVARCHAR(200),ISQYFRVARCHAR(200),QYISACTIVEVARCHAR(200),WXIDVARCHAR(400),WBIDVARCHAR(400),QQIDVARCHAR(400),LOCKVARCHAR(4),YPTOKENVARCHAR(200),openidVARCHAR(200),refreshtokenVARCHAR(200),PROFILEPICVARCHAR(200),failedtimesINTEGER,faileddateDATE,islockVARCHAR(200),COMPANYIDNUMBERVARCHAR(200),PRIMARYKEY(RowGuid));reason:com.huawei.gauss.exception.GaussException:[errorCode=GS-00601,SQLState='28000',reason='errLine=1,errColumn=709,errMsg=Sqlsyntaxerror:invalidcolumnname'LOCK',ioClient:@38cee291',sql=CREATETABLEADMIN.AUDIT_ONLINE_REGISTER(BelongXiaQuCodeVARCHAR(200),OperateUserNameVARCHAR(200),OperateDateDATE,Row_IDINTEGER,YearFlagVARCHAR(16),RowGuidVARCHAR(200)notnull,ACCOUNTGUIDVARCHAR(200),ACCOUNTSTATUSINTEGER,LASTLOGINDATEDATE,LOGINIDVARCHAR(200),PASSWORDVARCHAR(2000),IS_FIRSTLOGININTEGER,MOBILEVARCHAR(200),PWDLEVELVARCHAR(8),USERTYPEVARCHAR(40),USERNAMEVARCHAR(200),IDNUMBERVARCHAR(200),AUTHETYPEVARCHAR(200),ISREALNAMEVARCHAR(200),USERSOURCEVARCHAR(200),ISQYFRVARCHAR(200),QYISACTIVEVARCHAR(200),WXIDVARCHAR(400),WBIDVARCHAR(400),QQIDVARCHAR(400),LOCKVARCHAR(4),YPTOKENVARCHAR(200),openidVARCHAR(200),refreshtokenVARCHAR(200),PROFILEPICVARCHAR(200),failedtimesINTEGER,faileddateDATE,islockVARCHAR(200),COMPANYIDNUMBERVARCHAR(200),PRIMARYKEY(RowGuid)),sessionId=59]
10、不在datasync 转换规则内的字段信息,也会失败
如下bit类型的字段在gaussdb里没有,可尝试改为BOOLEAN(以字符串'0'或者'1'形式输入)或者int类型yf,portal_item,ADMIN,PORTAL_ITEM,ERROR,--,--,--,--,--
2020-01-0213:51:32PM[Thread:main:17243][Class:com.huawei.dss.envconvert.ddlvalidator.impl.DdlValidatorImpl>>Method:com.huawei.dss.envconvert.ddlvalidator.impl.DdlValidatorImpl.getColStr(DdlValidatorImpl.java:1692)]ERROR:[ADMIN.PORTAL_ITEMMissingtablecreationTask]AUTOLOADSCRIPTcolumntype:bitnotinatypemappingfile
11、CompleteReport.csv是导入完成之后的报告,用于显示导出与导入失败的表、失败的行数
[omm@databaseDataSync]$java-jarDSS.jar-iconfig/exp_obj.iniDataSync(1.1.1),FromHuawei!Copyright©HuaweiTechnologiesCo,Ltd2019AllRightsReserved.Startcheckingconfig.............................[ok]StartsyncingDDL.................................[ok]Startconvertingenvironment......................[ok]Startsyncingdata................................[ok]Datasyncing......................................[0/935]Datasyncing......................................[86/935]Datasyncing......................................[165/935]Datasyncing......................................[276/935]Datasyncing......................................[377/935]Datasyncing......................................[470/935]Datasyncing......................................[586/935]Datasyncing......................................[684/935]Datasyncing......................................[844/935]Datasynccompleted...............................[935/935]Startrecoveringenvrionment......................[ok]Startcollectingresults..........................[ok]Taskstarttime...................................[2020-01-0215:02:15]Taskendtime.....................................[2020-01-0215:03:21]Totalspenttime..................................[66.245s]Exportsuccessfuldata(rows).....................[159689]Exportfaileddata(rows).........................[0]Exportdatafailedtablecount....................[0]Importsuccessfuldata(rows).....................[134979]Importfaileddata(rows).........................[224956]Importfailedtable(tables).......................[26]Reportdetailspath...............................[./logs/reports_2020-01-02/15h-02m-15s/][omm@databaseDataSync]$pwd/opt/DataSync[omm@databaseDataSync]$
其中Importfailedtable(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),ISFKENABLEDdump&load,yf1b_stdzwfw9_7_11,ADMIN,cert_metadata_lyg,CERT_METADATA_LYG,2020-01-0215:02:57,2020-01-0215:02:57,95ms,4072,0,SUCCESSED,2020-01-0215:02:57,2020-01-0215:02:57,248ms,0,4072,FAILED,343ms,NoForeignKey
12、查看导入失败的一些表在
[omm@database~]$ll/home/omm/dataMigration/import_error_files/total28-rw-------1ommdbgrp195Jan215:02cert_metadata_lyg.dat-rw-------1ommdbgrp201Jan215:03cert_metadata_rd.dat-rw-------1ommdbgrp193Jan215:03cert_metadata_rg.dat-rw-------1ommdbgrp193Jan215:02cert_metadata_xy.dat-rw-------1ommdbgrp192Jan215:02cert_metadata_yz.dat-rw-------1ommdbgrp69Jan215:03jgzf_yearsj.dat-rw-------1ommdbgrp119Jan215:02table_struct.dat[omm@database~]$ll/home/omm/dataMigration/yf/total63168-rw-------1ommdbgrp2111Jan215:03asudit_online_evaluat.dat-rw-------1ommdbgrp101454Jan215:02asudit_project_docsnap.dat-rw-------1ommdbgrp3158Jan215:02asudit_sp_business.dat-rw-------1ommdbgrp40147Jan215:03asudit_task.dat
13、失败的表数据可通过load方式手动导入
[omm@databaseyf]$zsqladmin/admin_123@172.16.4.81:1888-q-c"LOADDATAINFILE'/home/omm/dataMigration/yf/table_struct.dat'INTOTABLE\"ADMIN\".\"TABLE_STRUCT2\"FIELDSTERMINATEDBY'|'LINESTERMINATEDBY'\n'columnsenclosedby'\"'optionallyignoreCHARSET=utf8THREADS10ERRORS0"connected.SQL>6231rowshavebeencommitted.Completethedataload.totallyreadrows:6231ignoredrows:0loadedrows:6231committedrows:6231errorrows:0skiprows:0
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。