久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

DM7數(shù)據(jù)復(fù)制中數(shù)據(jù)庫級復(fù)制的原理及用法是什么

175次閱讀
沒有評論

共計 10163 個字符,預(yù)計需要花費 26 分鐘才能閱讀完成。

DM7 數(shù)據(jù)復(fù)制中數(shù)據(jù)庫級復(fù)制的原理及用法是什么,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

DM 的數(shù)據(jù)復(fù)制可以在表級,模式級和庫級進(jìn)行配置,表級復(fù)制因為不能同步 DDL,所以必須要求主從段表的結(jié)構(gòu)必須完全一致。本篇我們看下數(shù)據(jù)庫級數(shù)據(jù)復(fù)制的配置過程。
下面舉一個簡單的例子來說明數(shù)據(jù)復(fù)制的配置。
1. 準(zhǔn)備工作
參與復(fù)制的復(fù)制實例的信息如下表所示。
數(shù)據(jù)庫 實例名 IP 地址 數(shù)據(jù)庫端口號 MAL 端口號 文件目錄
復(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)需要創(chuàng)建一個主數(shù)據(jù)庫上的 hy 用戶到從數(shù)據(jù)庫上 wy 用戶的同步復(fù)制關(guān)系,其名稱為 REPHY2WY。

2. 參數(shù)設(shè)置
修改 3 臺 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

在每個數(shù)據(jù)庫服務(wù)器上創(chuàng)建一個 dmmal.ini 文件,每個 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

對 3 個數(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ù)庫,需要對復(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 時表示創(chuàng)建用戶和系統(tǒng)表,為 0 時表示刪除用戶和系統(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é)點實例表
CREATE TABLE SYSREP.RPS_INSTANCES(
INST_NAME VARCHAR(128), // 復(fù)制節(jié)點實例名
GRP_ID INT, // 復(fù)制組 ID
INST_ID INT, // 實例在復(fù)制組中編號
FAULT_TIMEOUT INT, // 故障超時處理值,以秒為單位,0 為立即超時
VALID_FLAG CHAR(1), // 節(jié)點系統(tǒng)狀態(tài)
FAULT_TIME DATETIME, // 節(jié)點故障開始時間
NET_VALID_FLAG CHAR(1), // 網(wǎng)絡(luò)狀態(tài)
NET_FAULT_TIME DATETIME, // 網(wǎng)絡(luò)故障開始時間
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é)點實例編號
SINST_ID INT, // 從節(jié)點實例編號
ARCH_DIR VARCHAR(256), // 主節(jié)點歸檔日志路徑
FAULT_TIMEOUT INT, // 故障超時處理值,以秒為單位,0 為立即超時
VALID_FLAG CHAR(1), // 復(fù)制關(guān)系狀態(tài)
FAULT_TIME DATETIME, // 故障開始時間
SYNC_FLAG INTEGER // 指定同步或異步復(fù)制
TIMER_NAME VARCHAR(128) // 指定異步復(fù)制的定時器(同步復(fù)制沒有此項)
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é)點或關(guān)系
FAULT_TYPE VARCHAR(128), // 故障類型描述
START_TIME DATETIME, // 故障開始時間
END_TIME DATETIME // 故障結(jié)束時間
);
6) 復(fù)制沖突歷史表
CREATE TABLE SYSREP.RPS_CONFLICTS
(
SEQ_NO BIGINT // 沖突序號
REP_ID INT, // 對應(yīng)復(fù)制號
INST_ID INT, // 產(chǎn)生沖突的節(jié)點編號
TABLE_ID INT, // 沖突表 ID
TYPE TINYINT // 操作類型
OCC_TIME DATETIME, // 沖突產(chǎn)生時間
KEY_DATA VARCHAR(8000), // 沖突數(shù)據(jù)的 PK 值,如包含多個 KEY 值,則以逗號分隔。如鍵值超長則截斷
);
7) 復(fù)制定時器表
CREATE TABLE SYSREP.RPS_TIMERS (
NAME VARCHAR(128), // 定時器名稱
TYPE$ INT, // 定時類型,取值可參見 SP_RPS_CREATE_TIMER
FERQ_INTERVAL INT, // 間隔天數(shù)
FREQ_SUB_INTERVAL INT, // 間隔的月 / 周(調(diào)度類型決定)數(shù)
FREQ_MINUTE_INTERVAL INT, // 間隔的分鐘數(shù)
START_TIME TIME, // 開始時間
END_TIME TIME, // 結(jié)束時間
DURING_START_DATE DATETIME // 開始時間點
DURING_END_DATE DATETIME, // 結(jié)束時間點
NO_END_DATA_FLAG INTEGER // 是否有結(jié)束日期(0:有結(jié)束日期;1:沒有結(jié)束日期)
DESC$ VARCHAR(1000), // 定時器描述
CLUSTER PRIMARY KEY(REP_NAME)
);
配置模式級復(fù)制

啟動 3 臺服務(wù)器,啟動的順序不分先后。

[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ù)庫級復(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ù)庫級復(fù)制配置完成。注意一點,DM 的復(fù)制配置必須在開始復(fù)制配置之前執(zhí)行 SP_RPS_SET_BEGIN,配置完成之后執(zhí)行 SP_RPS_SET_APPLY 提交。

驗證同步
在主庫上的 hy 用戶下創(chuàng)建一個測試表 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 用戶查詢這個表 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.

從測試結(jié)果可以看到數(shù)據(jù)庫級的數(shù)據(jù)復(fù)制不支持 DDL, 數(shù)據(jù)庫的數(shù)據(jù)復(fù)制對創(chuàng)建用戶的操作處理異常,會導(dǎo)致從庫奔潰。

看完上述內(nèi)容,你們掌握 DM7 數(shù)據(jù)復(fù)制中數(shù)據(jù)庫級復(fù)制的原理及用法是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-18發(fā)表,共計10163字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 乐至县| 昆山市| 遂昌县| 富顺县| 太原市| 吉水县| 东山县| 晋中市| 平遥县| 湾仔区| 阜新| 平昌县| 信宜市| 安泽县| 贵港市| 通辽市| 台山市| 息烽县| 普陀区| 德兴市| 堆龙德庆县| 乌兰县| 老河口市| 永康市| 临夏县| 安仁县| 庆元县| 靖西县| 若羌县| 江西省| 芮城县| 尼木县| 晋江市| 神农架林区| 苏州市| 本溪市| 翁牛特旗| 梨树县| 灯塔市| 古丈县| 香格里拉县|