您好,登錄后才能下訂單哦!
DataSync支持GaussDB 100(GaussDB T)在線遷移和Sybase、Oracle、MySQL、 GaussDB 100 V100R003C10、SQL Server離線遷移兩種數(shù)據(jù)遷移方式。配置好源庫以及目標庫相關(guān)配置信息后,啟動遷移工具即可,運行過程中會生成相關(guān)的日志文件和報告,便于用戶進行日常的管理及維護。
DataSync實現(xiàn)功能如下所示:
數(shù)據(jù)導出:只支持離線遷移方式。
數(shù)據(jù)導入:只支持離線遷移方式。
數(shù)據(jù)導出+導入:支持離線遷移和在線遷移兩種方式。
表結(jié)構(gòu)校驗:離線遷移和在線遷移時均需要進行表結(jié)構(gòu)校驗。用戶可在執(zhí)行數(shù)據(jù) 遷移之前單獨進行表結(jié)構(gòu)校驗,也可以在執(zhí)行數(shù)據(jù)遷移過程中由DataSync工具自 動進行表結(jié)構(gòu)校驗。
使用DataSync的限制條件如下:
1、使用時必須確保遷移數(shù)據(jù)庫的服務器和被遷移數(shù)據(jù)庫的服務器可以正常連接。
2、使用時需保證通過配置的IP、端口、用戶名、密碼能夠正確連接數(shù)據(jù)庫。
3、使用時用戶需要評估目標數(shù)據(jù)庫占用空間和割接過程中使用的空間是否滿足。
4、 使用時確保已在運行遷移工具的設備安裝JAVA,版本須為1.8及以上。
5、使用時確保當前運行遷移工具設備的IP已配置在源數(shù)據(jù)庫和目標數(shù)據(jù)庫的白名單。
6用戶需要將需要導出的源數(shù)據(jù)庫JDBC驅(qū)動放置在dependency-jars中且驅(qū)動包名需
要跟規(guī)定的一致,否則會導致連接數(shù)據(jù)庫失敗,或采用指定jar包路徑的方式調(diào)用工具,
示例:
java -Xbootclasspath/a:/sybaseDriver/jconn4_sybase.jar:/sybaseDriver/bcprov-jdk16-1.46.jar jar DSS.jar
7、數(shù)據(jù)庫密碼不支持" “(空格)和”;"(分號),否則工具無法使用 zsql命令連接數(shù)據(jù)庫。詳情可查詢GaussDB 100 V300R001用戶手冊密碼相關(guān)章 節(jié)。 確保配置用戶有權(quán)限執(zhí)行相關(guān)操作,否則會導致運行工具達不到預期結(jié)果。配置 用戶所需權(quán)限請參見表2-1。
8、data_path配置項中所有路徑均需遵循遷移工具路徑白名單規(guī)則:路徑只允許包含 大小寫字母、數(shù)字、’’, ‘/’, ‘:’, ‘-’, ‘_’,不能以’-'打頭,不能同時包含 / 和 \
下面以MySQL在線遷移到gaussdb100為示例,oracle數(shù)據(jù)庫同樣可以實現(xiàn)在線遷移
源庫是mysql示例:
可以在源數(shù)據(jù)庫端執(zhí)行,無需在目標端創(chuàng)建表結(jié)構(gòu),自動在目標庫創(chuàng)建表結(jié)構(gòu),數(shù)據(jù)同步過去
請在配置cfg.ini流程前需要分別生成數(shù)據(jù)庫服務器密文、數(shù)據(jù)庫用戶密文、目標端服務器密文
生成cfg.ini文件中需要配置的密碼的密文。
在DSS.jar當前目錄執(zhí)行java -jar DSS.jar -pwd | -password password_type命令,然 后按提示輸入明文密碼,即可得到加密的密碼。
其中password_type表示cfg.ini文件中要生成密文的密碼類型。取值范圍是:整數(shù), [1,9]。具體含義如下:
– 1:導出數(shù)據(jù)庫密碼;
– 2:導入數(shù)據(jù)庫密碼;
– 3:導入服務器密碼;
– 4:導出操作所使用數(shù)據(jù)文件所在的遠程服務器密碼;
– 5:導入操作所使用數(shù)據(jù)文件所在的遠程服務器密碼;
– 6:導出數(shù)據(jù)庫生成truststore文件設置的密碼;
– 7:導出數(shù)據(jù)庫生成keystore文件設置的密碼;
– 8:導入數(shù)據(jù)庫生成truststore文件設置的密碼;
– 9:導入數(shù)據(jù)庫生成keystore文件設置的密碼。 密碼需根據(jù)類型逐個加密,不可重復復用。例如,如果導出數(shù)據(jù)庫和導入數(shù)據(jù)庫 密碼相同,需要使用“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==", /*java -jar DSS.jar -password 1--export database,這里使用命令生成數(shù)據(jù)庫用戶密文密碼*/ "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 -jar DSS.jar -password 2--import database,這里是生成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 -jar DSS.jar -password 3--import server-->這里是生成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,自動在目標庫創(chuàng)建表結(jié)構(gòu)*/ "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、選擇要遷移的源數(shù)據(jù)庫和源表,映射到目標庫
[root@192-168-188-155 config]# more exp_obj.ini yf.frame_att:TEMPTEST.FRAME_ATT --------------------------------------- -------------------------------------- 源數(shù)據(jù)庫表結(jié)構(gòu) gaussdb 100表結(jié)構(gòu) MySQL庫名和表名用小寫 gaussdb 100用戶名和表名用大寫
3、源端以root用戶執(zhí)行
執(zhí)行在線遷移命令:
[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、查看遷移報告,驗證數(shù)據(jù)一致性
DataSync工具運行過程中會生成以下日志:
dss_error_log.log:記錄工具運行時出現(xiàn)的異常以及錯誤日志,供維護人員定位分 析問題。
DDLReport.csv:遷移過程中如果失敗可查看,此為表結(jié)構(gòu)創(chuàng)建失敗的表對象
dss_info_log.log:會記錄遷移失敗的表、問題sql可在此log排查
1、datasync是通過load方式遷移數(shù)據(jù),只遷移表數(shù)據(jù)
2、在遷移前datasync會檢查表結(jié)構(gòu)信息,如有錯誤會中斷遷移,有關(guān)表結(jié)構(gòu)錯誤信息可查看DDLReport.csv
3、dss_info_log.log ---->遷移失敗的表、問題sql可在此log排查
4、datasync在導入之前會做ddl表結(jié)構(gòu)檢查,如果有表ddl創(chuàng)建失敗,導入過程就會被中斷,這步比較關(guān)鍵,所以要排除掉有問題的表,再去導入,可通過命令
grep -E ‘,ERROR,|,FAILED,’ ./logs/reports_2020-01-02/13h-51m-15s/CreateTblReport.csv,過濾出失敗的表(有時候需要注意下源表的表名大小寫問題)并在exp_obj.ini排除掉即可。詳細創(chuàng)建失敗的原因在dss_error_log.log
5、如果之前因為ddl問題導入失敗需要重新導入,可在gaussdb刪除之前的schema,再重新datasync導入
6、遷移時某些源表有自增列,會創(chuàng)建失敗
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用戶運行,文件目錄要授權(quán)
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在線遷移創(chuàng)建表的時候,gaussdb表字段大小會比源表略大
9、含有系統(tǒng)保留字會創(chuàng)建失敗
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 轉(zhuǎn)換規(guī)則內(nèi)的字段信息,也會失敗
如下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是導入完成之后的報告,用于顯示導出與導入失敗的表、失敗的行數(shù)
[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個有導入錯誤的表 例如: 實際報告導出、導入的行數(shù)有報錯,實際導入失敗行數(shù)不符合,源表明明沒有那么多行數(shù)據(jù),但是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、失敗的表數(shù)據(jù)可通過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
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。