DM7數(shù)據(jù)復(fù)制中數(shù)據(jù)庫級(jí)復(fù)制的原理及用法是什么,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
成都做網(wǎng)站、網(wǎng)站制作介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)公司擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
DM 的數(shù)據(jù)復(fù)制可以在表級(jí),模式級(jí)和庫級(jí)進(jìn)行配置,表級(jí)復(fù)制因?yàn)椴荒芡紻DL,所以必須要求主從段表的結(jié)構(gòu)必須完全一致。 本篇我們看下數(shù)據(jù)庫級(jí)數(shù)據(jù)復(fù)制的配置過程。
下面舉一個(gè)簡(jiǎn)單的例子來說明數(shù)據(jù)復(fù)制的配置。
1. 準(zhǔn)備工作
參與復(fù)制的復(fù)制實(shí)例的信息如下表所示。
數(shù)據(jù)庫 實(shí)例名 IP地址 數(shù)據(jù)庫端口號(hào) MAL端口號(hào) 文件目錄
復(fù)制數(shù)據(jù)庫 jydm 10.10.10.180 5236 5241 /dm_home/dmdba/dmdbms/data/
主數(shù)據(jù)庫 hy 10.10.10.184 5236 5242 /dm_home/dmdba/dmdbms/data/
從數(shù)據(jù)庫 wy 10.10.10.185 5236 5243 /dm_home/dmdba/dmdbms/data/
假設(shè)主數(shù)據(jù)庫上存在hy用戶,從數(shù)據(jù)庫上存在wy用戶,現(xiàn)需要?jiǎng)?chuàng)建一個(gè)主數(shù)據(jù)庫上的hy用戶到從數(shù)據(jù)庫上wy用戶的同步復(fù)制關(guān)系,其名稱為REPHY2WY。
2. 參數(shù)設(shè)置
修改3臺(tái)DM數(shù)據(jù)庫的dm.ini 文件,添加如下內(nèi)容:
數(shù)據(jù)庫 dm.ini 設(shè)置
復(fù)制數(shù)據(jù)庫 INSTANCE_NAME = jydm
PORT_NUM = 5236
MAL_INI = 1
主數(shù)據(jù)庫 INSTANCE_NAME = hy
PORT_NUM = 5236
MAL_INI = 1
從數(shù)據(jù)庫 INSTANCE_NAME = wy
PORT_NUM = 5236
MAL_INI = 1
配置dmmal.ini 文件
修改dmmal.ini文件,添加如下內(nèi)容。Dmmal 配置文件默認(rèn)沒有,可以從示例目錄下復(fù)制過來修改。
[root@shard1 ini_script]# pwd /dm_home/dmdba/dmdbms/samples/ini_script [root@shard1 ini_script]# ls -lrt 總用量 48 -rwxr-xr-x 1 dmdba dinstall 890 2月 14 2019 dmarch_example.ini -rwxr-xr-x 1 dmdba dinstall 1966 2月 14 2019 dmdcr_cfg_example.ini -rwxr-xr-x 1 dmdba dinstall 631 2月 14 2019 dmdcr_example.ini -rwxr-xr-x 1 dmdba dinstall 1537 2月 14 2019 dminit_example.ini -rwxr-xr-x 1 dmdba dinstall 2070 2月 14 2019 dmmal_example.ini -rwxr-xr-x 1 dmdba dinstall 1277 2月 14 2019 dmmonitor_example.ini -rwxr-xr-x 1 dmdba dinstall 288 2月 14 2019 dmmpp_example.ini -rwxr-xr-x 1 dmdba dinstall 1679 2月 14 2019 dmtimer_example.ini -rwxr-xr-x 1 dmdba dinstall 1241 2月 14 2019 dmwatch_example.ini -rwxr-xr-x 1 dmdba dinstall 2146 2月 14 2019 dmwatcher_example.ini -rwxr-xr-x 1 dmdba dinstall 522 2月 14 2019 dmwmon_example.ini -rwxr-xr-x 1 dmdba dinstall 636 2月 14 2019 sqllog_example.ini
在每個(gè)數(shù)據(jù)庫服務(wù)器上創(chuàng)建一個(gè)dmmal.ini文件,每個(gè)dmmal.ini 配置必須一致:
MAL_CHECK_INTERVAL = 5 MAL_CONN_FAIL_INTERVAL = 5 [MAL_jydm] MAL_INST_NAME = jydm MAL_HOST = 10.10.10.180 MAL_PORT = 5241 MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.180 [MAL_hy] MAL_INST_NAME = hy MAL_HOST = 10.10.10.184 MAL_PORT = 5242 MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.184 [MAL_wy] MAL_INST_NAME =wy MAL_HOST = 10.10.10.185 MAL_PORT = 5243 MAL_INST_PORT = 5236 MAL_INST_HOST =10.10.10.185 [dmdba@shard1 jydm]$ cat dmmal.ini MAL_CHECK_INTERVAL = 5 MAL_CONN_FAIL_INTERVAL = 5 [MAL_jydm] MAL_INST_NAME = jydm MAL_HOST = 10.10.10.180 MAL_PORT = 5241 MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.180 [MAL_hy] MAL_INST_NAME = hy MAL_HOST = 10.10.10.184 MAL_PORT = 5242 MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.184 [MAL_wy] MAL_INST_NAME =wy MAL_HOST = 10.10.10.185 MAL_PORT = 5243 MAL_INST_PORT = 5236 MAL_INST_HOST =10.10.10.185 [dmdba@jydm2 hy]$ cat dmmal.ini MAL_CHECK_INTERVAL = 5 MAL_CONN_FAIL_INTERVAL = 5 [MAL_jydm] MAL_INST_NAME = jydm MAL_HOST = 10.10.10.180 MAL_PORT = 5241 MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.180 [MAL_hy] MAL_INST_NAME = hy MAL_HOST = 10.10.10.184 MAL_PORT = 5242 MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.184 [MAL_wy] MAL_INST_NAME =wy MAL_HOST = 10.10.10.185 MAL_PORT = 5243 MAL_INST_PORT = 5236 MAL_INST_HOST =10.10.10.185 [dmdba@jydm3 wy]$ cat dmmal.ini MAL_CHECK_INTERVAL = 5 MAL_CONN_FAIL_INTERVAL = 5 [MAL_jydm] MAL_INST_NAME = jydm MAL_HOST = 10.10.10.180 MAL_PORT = 5241 MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.180 [MAL_hy] MAL_INST_NAME = hy MAL_HOST = 10.10.10.184 MAL_PORT = 5242 MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.184 [MAL_wy] MAL_INST_NAME =wy MAL_HOST = 10.10.10.185 MAL_PORT = 5243 MAL_INST_PORT = 5236 MAL_INST_HOST =10.10.10.185
對(duì)3個(gè)數(shù)據(jù)庫都要啟用mal_ini參數(shù)
SQL> sp_set_para_value(2,'MAL_INI',1); DMSQL executed successfully used time: 7.465(ms). Execute id is 23.
復(fù)制數(shù)據(jù)庫初始化
如果是第一次使用復(fù)制數(shù)據(jù)庫,需要對(duì)復(fù)制數(shù)據(jù)庫執(zhí)行初始化操作。通過執(zhí)行系統(tǒng)函數(shù)SP_INIT_REP_SYS(create_flag)來初始化復(fù)制數(shù)據(jù)庫。其主要作用是創(chuàng)建復(fù)制用戶(SYSREP/SYSREP)和創(chuàng)建復(fù)制數(shù)據(jù)庫上需要的系統(tǒng)表。SP_INIT_REP_SYS 的參數(shù)create_flag為1時(shí)表示創(chuàng)建用戶和系統(tǒng)表,為0時(shí)表示刪除用戶和系統(tǒng)表。
開始初始化:
SQL> SP_INIT_REP_SYS(1); DMSQL executed successfully used time: 115.960(ms). Execute id is 30. SQL> conn SYSREP/SYSREP Server[LOCALHOST:5236]:mode is normal, state is open login used time: 9.684(ms) SQL> select table_name from user_tables; LINEID TABLE_NAME ---------- ----------------- 1 RPS_GROUPS 2 RPS_INSTANCES 3 RPS_REPLICATIONS 4 RPS_TABMAPS 5 RPS_FAULT_HISTORY 6 RPS_CONFLICTS 7 RPS_TIMERS 7 rows got used time: 170.443(ms). Execute id is 31.
創(chuàng)建的7張復(fù)制系統(tǒng)表如下:
1) 復(fù)制組表
CREATE TABLE SYSREP.RPS_GROUPS (
NAME VARCHAR(128), // 復(fù)制組名
ID INT, // 復(fù)制組ID
DESC$ VARCHAR(1000), // 描述
CLUSTER PRIMARY (NAME)
);
2) 復(fù)制節(jié)點(diǎn)實(shí)例表
CREATE TABLE SYSREP.RPS_INSTANCES(
INST_NAME VARCHAR(128), // 復(fù)制節(jié)點(diǎn)實(shí)例名
GRP_ID INT, // 復(fù)制組ID
INST_ID INT, // 實(shí)例在復(fù)制組中編號(hào)
FAULT_TIMEOUT INT, // 故障超時(shí)處理值,以秒為單位,0為立即超時(shí)
VALID_FLAG CHAR(1), // 節(jié)點(diǎn)系統(tǒng)狀態(tài)
FAULT_TIME DATETIME, // 節(jié)點(diǎn)故障開始時(shí)間
NET_VALID_FLAG CHAR(1), // 網(wǎng)絡(luò)狀態(tài)
NET_FAULT_TIME DATETIME, // 網(wǎng)絡(luò)故障開始時(shí)間
CLUSTER PRIMAY KEY(GRP_ID, INST_NAME)
);
3) 復(fù)制關(guān)系表
CREATE TABLE SYSREP.RPS_REPLICATIONS(
REP_NAME VARCHAR(128), // 復(fù)制名
GRP_ID INT, // 復(fù)制組ID
REP_ID INT, // 復(fù)制ID,全局唯一
MINST_ID INT, // 主節(jié)點(diǎn)實(shí)例編號(hào)
SINST_ID INT, // 從節(jié)點(diǎn)實(shí)例編號(hào)
ARCH_DIR VARCHAR(256), // 主節(jié)點(diǎn)歸檔日志路徑
FAULT_TIMEOUT INT, // 故障超時(shí)處理值,以秒為單位,0為立即超時(shí)
VALID_FLAG CHAR(1), // 復(fù)制關(guān)系狀態(tài)
FAULT_TIME DATETIME, // 故障開始時(shí)間
SYNC_FLAG INTEGER //指定同步或異步復(fù)制
TIMER_NAME VARCHAR(128) //指定異步復(fù)制的定時(shí)器(同步復(fù)制沒有此項(xiàng))
DESC$ VARCHAR(1000), // 復(fù)制描述
CLUSTER PRIMARY KEY(GRP_ID, REP_NAME)
);
4) 復(fù)制映射表
CREATE TABLE SYSREP.RPS_TABMAPS(
REP_ID INT, //復(fù)制ID
MSCH_NAME VARCHAR(128), //主表模式名
MTAB_NAME VARCHAR(128), //主表名
MSCH_ID INT, //主表模式ID
MTAB_ID INT, //主表ID
SSCH_NAME VARCHAR(128), //從表模式名
STAB_NAME VARCHAR(128), //從表名
SSCH_ID INT, //從表模式ID
STAB_ID INT, //從表ID
READONLY_MODE INT, //映射模式1:只讀模式,0:非只讀模式
CLUSTER PRIMARY KEY(REP_ID, MTAB_ID, STAB_ID)
);
5) 復(fù)制故障歷史表
CREATE TABLE SYSREP.REP_FAULT_HISTORY(
GRP_NAME VARCHAR(128), // 復(fù)制組
OBJ_NAME VARCHAR(128), // 故障節(jié)點(diǎn)或關(guān)系
FAULT_TYPE VARCHAR(128), // 故障類型描述
START_TIME DATETIME, // 故障開始時(shí)間
END_TIME DATETIME // 故障結(jié)束時(shí)間
);
6) 復(fù)制沖突歷史表
CREATE TABLE SYSREP.RPS_CONFLICTS
(
SEQ_NO BIGINT // 沖突序號(hào)
REP_ID INT, // 對(duì)應(yīng)復(fù)制號(hào)
INST_ID INT, // 產(chǎn)生沖突的節(jié)點(diǎn)編號(hào)
TABLE_ID INT, // 沖突表ID
TYPE TINYINT // 操作類型
OCC_TIME DATETIME, // 沖突產(chǎn)生時(shí)間
KEY_DATA VARCHAR(8000), // 沖突數(shù)據(jù)的PK值,如包含多個(gè)KEY值,則以逗號(hào)分隔。如鍵值超長(zhǎng)則截?cái)?br/>);
7) 復(fù)制定時(shí)器表
CREATE TABLE SYSREP.RPS_TIMERS (
NAME VARCHAR(128), // 定時(shí)器名稱
TYPE$ INT, // 定時(shí)類型,取值可參見SP_RPS_CREATE_TIMER
FERQ_INTERVAL INT, // 間隔天數(shù)
FREQ_SUB_INTERVAL INT, // 間隔的月/周(調(diào)度類型決定)數(shù)
FREQ_MINUTE_INTERVAL INT, // 間隔的分鐘數(shù)
START_TIME TIME, // 開始時(shí)間
END_TIME TIME, // 結(jié)束時(shí)間
DURING_START_DATE DATETIME // 開始時(shí)間點(diǎn)
DURING_END_DATE DATETIME, // 結(jié)束時(shí)間點(diǎn)
NO_END_DATA_FLAG INTEGER //是否有結(jié)束日期(0:有結(jié)束日期;1:沒有結(jié)束日期)
DESC$ VARCHAR(1000), // 定時(shí)器描述
CLUSTER PRIMARY KEY(REP_NAME)
);
配置模式級(jí)復(fù)制
啟動(dòng)3臺(tái)服務(wù)器,啟動(dòng)的順序不分先后。
[root@shard1 jydm]# systemctl stop DmServicejydm.service [root@shard1 jydm]# systemctl start DmServicejydm.service [root@jydm2 ~]# systemctl stop DmServicehy.service [root@jydm2 ~]# systemctl start DmServicehy.service [root@jydm3 ~]# systemctl stop DmServicewy.service [root@jydm3 ~]# systemctl start DmServicewy.service
登錄復(fù)制數(shù)據(jù)庫(RPS jydm),保證服務(wù)器狀態(tài)為OPEN,開始復(fù)制配置。
[dmdba@shard1 bin]$ ./disql sysdba/abcd Server[LOCALHOST:5236]:mode is normal, state is open login used time: 9.851(ms) disql V7.1.6.46-Build(2018.02.08-89107)ENT Connected to: DM 7.1.6.46
創(chuàng)建復(fù)制組REP_GRP_hy2wy
SQL> SP_RPS_ADD_GROUP('REP_GRP_hy2wy', '主從同步復(fù)制'); DMSQL executed successfully used time: 32.545(ms). Execute id is 26. SQL> select * from SYSREP.RPS_GROUPS; LINEID NAME ID DESC$ ---------- ------------- ----------- ------------ 1 REP_GRP_hy2wy 3 主從同步復(fù)制 used time: 1.073(ms). Execute id is 27.
開始設(shè)置
SQL> SP_RPS_SET_BEGIN('REP_GRP_hy2wy'); DMSQL executed successfully used time: 0.530(ms). Execute id is 57.
添加復(fù)制關(guān)系
SQL> SP_RPS_ADD_REPLICATION ('REP_GRP_hy2wy', 'REPhy2wy', 'hy到wy的同步復(fù)制', 'hy', 'wy', NULL, '/dm_home/dmdba/dmdbms/dmreplog'); DMSQL executed successfully used time: 2.529(ms). Execute id is 29.
添加數(shù)據(jù)庫級(jí)復(fù)制
SQL> SP_RPS_ADD_DB_MAP('REPhy2wy', 0); DMSQL executed successfully used time: 0.597(ms). Execute id is 30.
提交設(shè)置
SQL> SP_RPS_SET_APPLY(); DMSQL executed successfully used time: 00:00:05.035. Execute id is 31. SQL> select * from SYSREP.RPS_REPLICATIONS; LINEID REP_NAME GRP_ID REP_ID MINST_ID SINST_ID ARCH_DIR FAULT_TIMEOUT VALID_FLAG FAULT_TIME SYNC_FLAG TIMER_NAME DESC$ ---------- -------- ----------- ----------- ----------- ----------- ------------------------------ ------------- ----------- --------------------------- ----------- ---------- ---------------- 1 REPhy2wy 3 4 7 8 /dm_home/dmdba/dmdbms/dmreplog -1 0 NULL 1 NULL hy到wy的同步復(fù)制 used time: 1.277(ms). Execute id is 32. SQL> select * from SYSREP.RPS_INSTANCES; LINEID INST_NAME GRP_ID INST_ID FAULT_TIMEOUT VALID_FLAG FAULT_TIME NET_VALID_FLAG NET_FAULT_TIME ---------- --------- ----------- ----------- ------------- ----------- --------------------------- -------------- --------------------------- 1 hy 3 7 -1 0 NULL 0 NULL 2 wy 3 8 -1 0 NULL 0 NULL used time: 1.014(ms). Execute id is 33. SQL> select * from SYSREP.RPS_TABMAPS; LINEID REP_ID MSCH_NAME MTAB_NAME MSCH_ID MTAB_ID SSCH_NAME STAB_NAME SSCH_ID STAB_ID READONLY_MODE ---------- ----------- --------- --------- ----------- ----------- --------- --------- ----------- ----------- ------------- 1 4 NULL NULL -1 -1 NULL NULL -1 -1 0 used time: 1.129(ms). Execute id is 34.
至此,數(shù)據(jù)庫級(jí)復(fù)制配置完成。注意一點(diǎn),DM的復(fù)制配置必須在開始復(fù)制配置之前執(zhí)行SP_RPS_SET_BEGIN,配置完成之后執(zhí)行SP_RPS_SET_APPLY提交。
驗(yàn)證同步
在主庫上的hy用戶下創(chuàng)建一個(gè)測(cè)試表t4
SQL> create table t4 as select * from sysobjects; executed successfully used time: 12.280(ms). Execute id is 12. SQL> select count(*) from t4; LINEID COUNT(*) ---------- -------------------- 1 1480 used time: 1.256(ms). Execute id is 13.
在從庫上的wy用戶查詢這個(gè)表t4
SQL> select count(*) from t4; select count(*) from t4; [-2106]:Error in line: 1 Invalid table or view name [T4]. used time: 0.423(ms). Execute id is 0.
可以看到創(chuàng)建表的DDL語句沒有同步到wy用戶下。
在主庫上創(chuàng)建用戶jy
SQL> create user jy identified by "abcd"; executed successfully used time: 4.940(ms). Execute id is 5. SQL> grant dba,resource to jy; executed successfully used time: 2.929(ms). Execute id is 6.
在從庫上登錄用戶jy
[dmdba@jydm3 bin]$ ./disql jy/abcd [-70028]:Create SOCKET connection failure. disql V7.1.6.46-Build(2018.02.08-89107)ENT username:
從從庫上的日志可以看到故障信息
2019-12-20 00:15:08 [WARNING] database P0000029732 main_thread rps sys init failed, code:-8748
從復(fù)制數(shù)據(jù)庫上查看復(fù)制故障信息
SQL> select * from SYSREP.RPS_FAULT_HISTORY; LINEID GRP_NAME OBJ_NAME FAULT_TYPE START_TIME END_TIME ---------- ------------- -------- ------------------ --------------------------- --------------------------- 1 REP_GRP_hy2wy REPhy2wy REPLICATION FAULT 2019-12-20 00:14:23.366210 2019-12-20 00:15:24.042032 2 REP_GRP_hy2wy wy INSTANCE SYS FAULT 2019-12-20 00:14:23.366210 2019-12-20 00:15:24.042032 3 REP_GRP_hy2wy REPhy2wy REPLICATION FAULT 2019-12-20 00:16:23.386842 NULL 4 REP_GRP_hy2wy wy INSTANCE SYS FAULT 2019-12-20 00:16:23.386842 NULL used time: 1.179(ms). Execute id is 4.
從測(cè)試結(jié)果可以看到數(shù)據(jù)庫級(jí)的數(shù)據(jù)復(fù)制不支持DDL,數(shù)據(jù)庫的數(shù)據(jù)復(fù)制對(duì)創(chuàng)建用戶的操作處理異常,會(huì)導(dǎo)致從庫奔潰。
看完上述內(nèi)容,你們掌握DM7數(shù)據(jù)復(fù)制中數(shù)據(jù)庫級(jí)復(fù)制的原理及用法是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!