DM7数据复制中数据库级复制的原理及用法是什么

网友投稿 225 2023-12-13

DM7数据复制中数据库级复制的原理及用法是什么

DM7数据复制中数据库级复制的原理及用法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

DM 的数据复制可以在表级,模式级和库级进行配置,表级复制因为不能同步DDL,所以必须要求主从段表的结构必须完全一致。 本篇我们看下数据库级数据复制的配置过程。

下面举一个简单的例子来说明数据复制的配置。

1. 准备工作

参与复制的复制实例的信息如下表所示。

数据库 实例名 IP地址 数据库端口号 MAL端口号 文件目录

复制数据库 jydm 10.10.10.180 5236 5241 /dm_home/dmdba/dmdbms/data/

主数据库 hy 10.10.10.184 5236 5242 /dm_home/dmdba/dmdbms/data/

从数据库 wy 10.10.10.185 5236 5243 /dm_home/dmdba/dmdbms/data/

假设主数据库上存在hy用户,从数据库上存在wy用户,现需要创建一个主数据库上的hy用户到从数据库上wy用户的同步复制关系,其名称为REPHY2WY。

2. 参数设置

修改3台DM数据库的dm.ini 文件,添加如下内容:

数据库 dm.ini 设置

复制数据库 INSTANCE_NAME = jydm

PORT_NUM = 5236

MAL_INI = 1

主数据库 INSTANCE_NAME = hy

PORT_NUM = 5236

MAL_INI = 1

从数据库 INSTANCE_NAME = wy

PORT_NUM = 5236

MAL_INI = 1

配置dmmal.ini 文件

修改dmmal.ini文件,添加如下内容。Dmmal 配置文件默认没有,可以从示例目录下复制过来修改。[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

在每个数据库服务器上创建一个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个数据库都要启用mal_ini参数

SQLsp_set_para_value(2,MAL_INI,1); DMSQL executed successfully used time7.465(ms). Execute id is 23.

复制数据库初始化

如果是第一次使用复制数据库,需要对复制数据库执行初始化操作。通过执行系统函数SP_INIT_REP_SYS(create_flag)来初始化复制数据库。其主要作用是创建复制用户(SYSREP/SYSREP)和创建复制数据库上需要的系统表。SP_INIT_REP_SYS 的参数create_flag为1时表示创建用户和系统表,为0时表示删除用户和系统表。

开始初始化:

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.

创建的7张复制系统表如下:

1) 复制组表

CREATE TABLE SYSREP.RPS_GROUPS (

NAME VARCHAR(128), // 复制组名

ID INT, // 复制组ID

DESC$ VARCHAR(1000), // 描述

CLUSTER PRIMARY (NAME)

);

2) 复制节点实例表

CREATE TABLE SYSREP.RPS_INSTANCES(

INST_NAME VARCHAR(128), // 复制节点实例名

GRP_ID INT, // 复制组ID

INST_ID INT, // 实例在复制组中编号

FAULT_TIMEOUT INT, // 故障超时处理值,以秒为单位,0为立即超时

VALID_FLAG CHAR(1), // 节点系统状态

FAULT_TIME DATETIME, // 节点故障开始时间

NET_VALID_FLAG CHAR(1), // 网络状态

NET_FAULT_TIME DATETIME, // 网络故障开始时间

CLUSTER PRIMAY KEY(GRP_ID, INST_NAME)

);

3) 复制关系表

CREATE TABLE SYSREP.RPS_REPLICATIONS(

REP_NAME VARCHAR(128), // 复制名

GRP_ID INT, // 复制组ID

REP_ID INT, // 复制ID,全局唯一

MINST_ID INT, // 主节点实例编号

SINST_ID INT, // 从节点实例编号

ARCH_DIR VARCHAR(256), // 主节点归档日志路径

FAULT_TIMEOUT INT, // 故障超时处理值,以秒为单位,0为立即超时

VALID_FLAG CHAR(1), // 复制关系状态

FAULT_TIME DATETIME, // 故障开始时间

SYNC_FLAG INTEGER //指定同步或异步复制

TIMER_NAME VARCHAR(128) //指定异步复制的定时器(同步复制没有此项)

DESC$ VARCHAR(1000), // 复制描述

CLUSTER PRIMARY KEY(GRP_ID, REP_NAME)

);

4) 复制映射表

CREATE TABLE SYSREP.RPS_TABMAPS(

REP_ID INT, //复制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) 复制故障历史表

CREATE TABLE SYSREP.REP_FAULT_HISTORY(

GRP_NAME VARCHAR(128), // 复制组

OBJ_NAME VARCHAR(128), // 故障节点或关系

FAULT_TYPE VARCHAR(128), // 故障类型描述

START_TIME DATETIME, // 故障开始时间

END_TIME DATETIME // 故障结束时间

);

6) 复制冲突历史表

CREATE TABLE SYSREP.RPS_CONFLICTS

(

SEQ_NO BIGINT // 冲突序号

REP_ID INT, // 对应复制号

INST_ID INT, // 产生冲突的节点编号

TABLE_ID INT, // 冲突表ID

TYPE TINYINT // 操作类型

OCC_TIME DATETIME, // 冲突产生时间

KEY_DATA VARCHAR(8000), // 冲突数据的PK值,如包含多个KEY值,则以逗号分隔。如键值超长则截断

);

7) 复制定时器表

CREATE TABLE SYSREP.RPS_TIMERS (

NAME VARCHAR(128), // 定时器名称

TYPE$ INT, // 定时类型,取值可参见SP_RPS_CREATE_TIMER

FERQ_INTERVAL INT, // 间隔天数

FREQ_SUB_INTERVAL INT, // 间隔的月/周(调度类型决定)数

FREQ_MINUTE_INTERVAL INT, // 间隔的分钟数

START_TIME TIME, // 开始时间

END_TIME TIME, // 结束时间

DURING_START_DATE DATETIME // 开始时间点

DURING_END_DATE DATETIME, // 结束时间点

NO_END_DATA_FLAG INTEGER //是否有结束日期(0:有结束日期;1:没有结束日期)

DESC$ VARCHAR(1000), // 定时器描述

CLUSTER PRIMARY KEY(REP_NAME)

);

配置模式级复制

启动3台服务器,启动的顺序不分先后。

[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

登录复制数据库(RPS jydm),保证服务器状态为OPEN,开始复制配置。

[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

创建复制组REP_GRP_hy2wy

SQL> SP_RPS_ADD_GROUP(REP_GRP_hy2wy, 主从同步复制); 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           主从同步复制 used time: 1.073(ms). Execute id is 27.

开始设置

SQLSP_RPS_SET_BEGIN(REP_GRP_hy2wy); DMSQL executed successfully used time0.530(ms). Execute id is 57.

添加复制关系

SQLSP_RPS_ADD_REPLICATION (REP_GRP_hy2wyREPhy2wyhy到wy的同步复制,hywy, NULL, /dm_home/dmdba/dmdbms/dmreplog); DMSQL executed successfully used time2.529(ms). Execute id is 29.

添加数据库级复制

SQL> SP_RPS_ADD_DB_MAP(REPhy2wy, 0); DMSQL executed successfully used time: 0.597(ms). Execute id is 30.

提交设置

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的同步复制 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.

至此,数据库级复制配置完成。注意一点,DM的复制配置必须在开始复制配置之前执行SP_RPS_SET_BEGIN,配置完成之后执行SP_RPS_SET_APPLY提交。

验证同步

在主库上的hy用户下创建一个测试表t4SQL> create table t4 as select * fromsysobjects; 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.

可以看到创建表的DDL语句没有同步到wy用户下。

在主库上创建用户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]:CreateSOCKET 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

从复制数据库上查看复制故障信息

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.

从测试结果可以看到数据库级的数据复制不支持DDL,数据库的数据复制对创建用户的操作处理异常,会导致从库奔溃。

看完上述内容,你们掌握DM7数据复制中数据库级复制的原理及用法是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:DM7数据复制中模式级复制的配置及用法是什么
下一篇:DM7数组索引的概念是什么
相关文章

 发表评论

暂时没有评论,来抢沙发吧~