DM7数据复制中表级复制是怎样的

62次阅读
没有评论

共计 21878 个字符,预计需要花费 55 分钟才能阅读完成。

DM7 数据复制中表级复制是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

达梦数据复制(DATA REPLICATION)是一个分担系统访问压力、加快异地访问响应速度、提高数据可靠性的解决方案。将一个服务器实例上的数据变更复制到另外的服务器实例。可以用于解决大、中型应用中出现的因来自不同地域、不同部门、不同类型的数据访问请求导致数据库服务器超负荷运行、网络阻塞、远程用户的数据响应迟缓的问题。

重要概念
1. 数据库状态
服务器的状态,在不同的状态下,对能够进行的操作有不同的限制。详见数据守护部分。
2. 主服务器
发起复制操作的服务器,称为主服务器。
3. 从服务器
接收主服务器发送的数据并进行复制的服务器,称为从服务器。
4. 复制节点
涉及到复制的服务器,主服务和从服务的统称。一个节点既可以是主服务器也可以是从服务器。
5. 复制服务器(RPS)
在数据复制环境中,负责配置复制环境,定义复制关系的服务器。RPS 有且仅有一台,它只负责配置和监控,并不参与到复制过程中。
6. 复制关系
复制关系指明主服务器和从服务器以何种方式进行复制。按照复制的方式,复制关系分为同步复制和异步复制。
7. 同步复制关系
主服务器数据更新立即复制到从服务器。
8. 异步复制关系
主服务器和从服务器在某段时间内数据可能是不同的,主服务器数据更新不会立刻同步到从服务器,而是在经过一段时间后才进行复制。异步复制的同步时机由指定的定时器确定。
9. 逻辑日志
记录产生数据变化的逻辑操作的日志。记录的逻辑操作包括 INSERT、UPDATE、DELETE、TRUNCATE、ROLLBACK 和 COMMIT。
10. 复制源对象
主服务器上作为复制数据源的对象,可以是库、模式或表。在该对象上的操作都会被记录成逻辑日志,发送给从服务器进行复制操作。

11. 复制目标对象
从服务器上作为复制数据目标的对象。从服务器接收到逻辑日志后,将复制源对象的变化复制到复制目标对象中。

12. 复制对象映射
一对复制源对象和复制目标对象构成一个复制对象映射。构成映射的源对象和目标对象必须是同一类型的对象。根据对象的类型,复制映射分为库级、模式级和表级三个级别。其中表级要求源表和目标表结构完全一致,库级和模式级没有要求。库级和模式级复制映射会将其 DDL 也进行复制。复制映射包括只读模式和非只读模式。对于只读模式的映射,映射的目的表禁止用户更新。
13. 复制组
一组逻辑相关的复制关系可以构造成为复制组。通过复制组,可以构造出一对多复制、多对一复制、级联复制、对称复制、循环复制等复杂的逻辑复制环境。

体系构架
数据复制系统由以下部件构成:
1. 复制服务器;
2. 复制节点;
3. 各实例站点间通讯的 MAL 系统。

除了系统管理员通过复制服务器定义复制和处理异常外,其他部分的处理及主从服务器之间复制操作对于用户是透明的。整个复制环境的配置境况如下图所示。

在整个环境中有且仅有一台复制服务器(RPS),用户通过 RPS 定义复制及复制环境,但 RPS 并不参与到复制过程中。
DM7 中,将复制逻辑日志按照配置归档到本站点指定目录称为本地归档,将日志的发送称为日志的远程归档。
复制节点上,与复制相关的配置文件有 dmtimer.ini、dmllog.ini、dmrep.ini。各个配置文件在复制中的功能如下表所示

这些文件均是 RPS 依据用户配置通过 MAL 系统自动生成或修改的,管理员不需要手动进行管理。

在数据复制过程中,除了配置文件,其他的重要文件如下表。

这些文件都是流式文件,主服务器在执行过程中,逻辑日志先记录到逻辑日志文件中,并根据配置的信息,将逻辑日志分别分发归档到不同的逻辑日志归档文件中,并在恰当的时机将逻辑日志归档文件的内容发送给从服务器。

从服务器接收到一批数据就产生一个复制数据文件将数据存储其中,防止从服务器复制速度低导致复制数据的丢失。
逻辑日志文件大小限制为 32M,两个文件交替使用。

归档路径内每个逻辑日志归档文件大小限制为 32M,文件写满后增加新文件来存放新的记录。在 dmllog.ini 中有配置归档路径内所有文件总的空间限制,若达到限制的空间,则会删除之前的文件;若配置为无空间限制,则管理员可根据复制情况进行删除。

复制数据文件是从服务器一次接收的复制数据的临时文件,其大小不会超过 32K;在其数据复制结束后会被自动删除。

配置数据复制在 RPS 上进行,与数据复制相关的过程如下:
1. SP_INIT_REP_SYS*
定义:
SP_INIT_REP_SYS(
CREATE_FLAG INT
);
功能说明:
创建或删除数据复制所需的系统表
参数说明:
CREATE_FLAG:为 1 表示创建复制所需系统表;为 0 表示删除这些系统表
返回值:

举例说明:
创建复制所需的系统表
SP_INIT_REP_SYS(1);

2. SP_RPS_ADD_GROUP
定义:
SP_RPS_ADD_GROUP(
GROUP_NAME VARCHAR(128),
GROUP_DESC VARCHAR(1000)
);
功能说明:
创建复制组
参数说明:
GROUP_NAME:创建的复制组名称
GROUP_DESC:复制组描述
返回值:

备注:
指示 RPS 创建一个新的复制组。如果已存在同名复制组则报错。
举例说明:
创建复制组 REP_GRP_B2C
SP_RPS_ADD_GROUP(REP_GRP_B2C , 主从同步复制

3. SP_RPS_DROP_GROUP
定义:
SP_RPS_DROP_GROUP(
GROUP_NAME VARCHAR(128)
);
功能说明:
删除复制组
参数说明:
GROUP_NAME:复制组名称
返回值:

举例说明:
删除复制组 REP_GRP_B2C
SP_RPS_DROP_GROUP (REP_GRP_B2C

4. SP_RPS_ADD_REPLICATION
定义:
SP_RPS_ADD_REPLICATION(
GRP_NAME VARCHAR(128),
REP_NAME VARCHAR(128),
REP_DESC VARCHAR(1000),
MINSTANCE VARCHAR(128),
SINSTANCE VARCHAR(128),
REP_TIMER VARCHAR(128),
ARCH_PATH VARCHAR(256)
);
功能说明:
创建复制关系
参数说明:
GRP_NAME:复制组名
REP_NAME:复制名,必须在 RPS 上唯一
REP_DESC:复制描述
MINSTANCE:主节点实例名,必须在 RPS 的 MAL 中已配置
SINSTANCE:从节点实例名,必须在 RPS 的 MAL 中已配置
REP_TIMER:复制定时器名。借助定时器,可以设置复制数据的同步时机。如果是同步复制则为 NULL
ARCH_PATH:主服务器上逻辑日志的完整归档路径。
返回值:

举例说明:
创建复制关系
SP_RPS_ADD_REPLICATION (REP_GRP_B2C , REPB2C , B 到 C 的同步复制 , B , C , NULL, { DEFARCHPATH}\REPB2C

5. SP_RPS_DROP_REPLICATION
定义:
SP_RPS_DROP_REPLICATION (
REP_NAME VARCHAR(128)
);
功能说明:
删除复制关系
参数说明:
REP_NAME:复制名称
返回值:

举例说明:
删除复制关系
SP_RPS_DROP_REPLICATION (REPB2C

6. SP_RPS_SET_ROUTE_FAULT_TIMEOUT
定义:
SP_RPS_SET_ROUTE_FAULT_TIMEOUT (
REP_NAME VARCHAR(128),
TIMEOUTS INT
);
功能说明:
设置复制路径故障超时
参数说明:
REP_NAME:复制关系名。
TIMEOUTS:故障超时值,以秒为单位。0 为立即超时;- 1 表示无超时限制返回值:

备注:
该接口用于设置复制路径故障处理策略。设置后,RPS 如检测到复制路径产生故障,且故障持续超过设定的超时值后,则需要取消故障的复制关系。
举例说明:
设置复制路径故障超时
SP_RPS_SET_ROUTE_FAULT_TIMEOUT (REPB2C ,10);

7. SP_RPS_SET_INST_FAULT_TIMEOUT
定义:
SP_RPS_SET_INST_FAULT_TIMEOUT (
INST_NAME VARCHAR(128),
TIMEOUTS INT
);
功能说明:
设置复制节点故障超时
参数说明:
INST_NAME:复制节点实例名
TIMEOUTS:故障超时值,以秒为单位。0 为立即超时;- 1 表示无超时限制
返回值:

举例说明:
设置复制节点故障超时
SP_RPS_SET_INST_FAULT_TIMEOUT (B ,10);

8. SP_RPS_ADD_TIMER
定义:
SP_RPS_ADD_TIMER(
TIMER_NAME VARCHAR(128),
TIMER_DESC VARCHAR(1000),
TYPE$ INT,
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 INT
);
功能说明:
设置复制关系的定时器
参数说明:
TIMER_NAME:定时器名
TIMER_DESC:定时器描述
TYPE$:定时器类型,取值如下:
1:执行一次
2:每日执行
3:每周执行
4:按月执行的第几天
5:按月执行的第一周
6:按月执行的第二周
7:按月执行的第三周
8:按月执行的第四周
9:按月执行的最后一周
FREQ_INTERVAL:间隔的月 / 周(调度类型决定)数
FREQ_SUB_INTERVAL:间隔天数
FREQ_MINUTE_INTERVAL:间隔的分钟数
START_TIME:开始时间
END_TIME:结束时间
DURING_START_DATE:有效日期时间段的开始日期时间
DURING_END_DATE:有效日期时间段结束日期时间
NO_END_DATA_FLAG:结束日期是否无效标识,0 表示结束日期有效,1 表示无效
本过程的 TYPE$、FERQ_INTERVAL、FREQ_SUB_INTERVAL、FREQ_MINUTE_INTERVAL、START_TIME、END_TIME、DURING_START_DATE、DURING_END_DATE 和 NO_END_DATA_FLAG 分别与过程 SP_ADD_TIMER 的参数 TYPE、FREQ_MONTH_WEEK_INTERVAL、FREQ_SUB_INTERVAL、FREQ_MINUTE_INTERVAL、START_TIME、END_TIME、DURING_START_DATE、DURING_END_DATE 和 NO_END_DATE_FLAG 对应,其具体说明可参考过程 SP_ADD_TIMER 的说明。
返回值:

举例说明:
设置复制关系的定时器
SP_RPS_ADD_TIMER (TIMER1 , 按天计算 , 1, 1, 0, 1, CURTIME, 23:59:59 , NOW, NULL, 1);

9. SP_RPS_REP_RESET_TIMER
定义:
SP_RPS_REP_RESET_TIMER(
REP_NAME VARCHAR(128),
TIMER_NAME VARCHAR(128)
);
功能说明:
重新设置复制关系的定时器
参数说明:
REP_NAME:复制名
TIMER_NAME:新的定时器名
返回值:

举例说明:
重新设置复制关系的定时器
SP_RPS_REP_RESET_TIMER (REPB2C , TIMER1

10. SP_RPS_ADD_TAB_MAP
定义:
SP_RPS_ADD_TAB_MAP(
REP_NAME VARCHAR(128),
MTAB_SCHEMA VARCHAR(128),
MTAB_NAME VARCHAR(128),
STAB_SCHEMA VARCHAR(128),
STAB_NAME VARCHAR(128),
READ_ONLY_MODE INT
);
功能说明:
添加表级复制映射
参数说明:
REP_NAME:复制关系名
MTAB_SCHEMA:主表模式名
MTAB_NAME:主表名
STAB_SCHEMA:从表模式名
STAB_NAME:从表名
READ_ONLY_MODE:只读复制模式,1 表示只读模式,从表只接受复制更新,0 表示非只读模式
返回值:

举例说明:
添加复制映射
SP_RPS_ADD_TAB_MAP(REPB2C , USER1 , T1 , USER2 , T2 , 0);

11. SP_RPS_DROP_TAB_MAP
定义:
SP_RPS_DROP_TAB_MAP(
REP_NAME VARCHAR(128),
MTAB_SCHEMA VARCHAR(128),
MTAB_NAME VARCHAR(128),
STAB_SCHEMA VARCHAR(128),
STAB_NAME VARCHAR(128),
);
功能说明:
删除表级复制映射
参数说明:
REP_NAME:复制关系名
MTAB_SCHEMA:主表模式名
MTAB_NAME:主表名
STAB_SCHEMA:从表模式名
STAB_NAME:从表名
返回值:

举例说明:
删除表级复制映射
SP_RPS_DROP_TAB_MAP(REPB2C , USER1 , T1 , USER2 , T2

12. SP_RPS_ADD_SCH_MAP
定义:
SP_RPS_ADD_SCH_MAP(
REP_NAME VARCHAR(128),
MSCH VARCHAR(128),
SSCH VARCHAR(128),
READ_ONLY_MODE INT
);
功能说明:
添加模式级复制映射
参数说明:
REP_NAME:复制关系名
MSCH:主模式名
SSCH:从表模式名
READ_ONLY_MODE:只读复制模式,1 表示只读模式,从表只接受复制更新,0 表示非只读模式
返回值:

举例说明:
添加复制映射
SP_RPS_ADD_SCH_MAP(REPB2C , USER1 , USER2 , 0);

13. SP_RPS_DROP_SCH_MAP
定义:
SP_RPS_DROP_SCH_MAP(
REP_NAME VARCHAR(128),
MSCH VARCHAR(128),
SSCH VARCHAR(128)
);
功能说明:
删除模式级复制映射
参数说明:
REP_NAME:复制关系名
MSCH:主模式名
SSCH:从模式名
返回值:

举例说明:
删除模式级复制映射
SP_RPS_DROP_SCH_MAP(REPB2C , USER1 , USER2

14. SP_RPS_ADD_DB_MAP
定义:
SP_RPS_ADD_DB_MAP(
REP_NAME VARCHAR(128),
READ_ONLY_MODE INT
);
功能说明:
添加库级复制映射
参数说明:
REP_NAME:复制关系名
READ_ONLY_MODE:只读复制模式,1 表示只读模式,从表只接受复制更新,0 表示非只读模式
返回值:

举例说明:
添加库级复制映射
SP_RPS_ADD_DB_MAP(REPB2C , 0);

15. SP_RPS_DROP_DB_MAP
定义:
SP_RPS_DROP_DB_MAP(
REP_NAME VARCHAR(128)
);
功能说明:
删除库级复制映射
参数说明:
REP_NAME:复制关系名
返回值:

举例说明:
删除库级复制映射
SP_RPS_DROP_DB_MAP(REPB2C

16. SP_RPS_SET_BEGIN
定义:
SP_RPS_SET_BEGIN(
GRP_NAME VARCHAR(128),
);
功能说明:
开始复制设置
参数说明:
GRP_NAME:复制组名
返回值:

备注:
开始对指定复制组进行属性设置。创建 / 删除复制关系与创建 / 删除复制映射等接口都必须在此接口调用后执行,否则会报错“错误的复制设置序列”。同一会话中也不能同时开始多个复制设置。
举例说明:
复制组 REPB2C 开始复制
SP_RPS_SET_BEGIN(REP_GRP_B2C

17. SP_RPS_SET_APPLY
定义:
SP_RPS_SET_APPLY ();
功能说明:
提交复制设置,保存并提交本次设置的所有操作。如果需要继续设置,则必须重新调用 SP_RPS_SET_BEGIN
参数说明:

返回值:

举例说明:
提交复制设置
SP_RPS_SET_APPLY ();
18. SP_RPS_SET_CANCEL
定义:
SP_RPS_SET_CANCEL ();
功能说明:
放弃复制设置,放弃本次设置的所有操作。如果需要重新设置,则必须再次调用 SP_RPS_SET_BEGIN
参数说明:

返回值:

举例说明:
放弃复制设置
SP_RPS_SET_CANCEL();

DM 的数据复制可以在表级,模式级和库级进行配置,本篇我们看下表级数据复制的配置过程。
下面举一个简单的例子来说明数据复制的配置。
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.t1 表,从数据库上存在与主数据库 hy.t1 表结构完全相同的 wy.t1 表,现需要创建一个主数据库上 hy.t1 表到从数据库上 wy.t1 表的同步复制关系,其名称为 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 参数

SQL  sp_set_para_value(2, MAL_INI ,1);
DMSQL executed successfully
used time: 7.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: 16.792(ms). Execute id is 3.
SQL  select * from SYSREP.RPS_GROUPS;
LINEID NAME ID DESC$ 
---------- ------------- ----------- ------------
1 REP_GRP_hy2wy 1  主从同步复制
used time: 1.599(ms). Execute id is 4.

开始设置

SQL  SP_RPS_SET_BEGIN( REP_GRP_hy2wy 
DMSQL executed successfully
used time: 1.081(ms). Execute id is 6.

添加复制关系

SQL  SP_RPS_ADD_REPLICATION ( REP_GRP_hy2wy ,  REPhy2wy ,  hy 到 wy 的同步复制 ,  hy ,  wy , NULL,  /dm_home/dmdba/dmdbms/dmreplog 
DMSQL executed successfully
used time: 3.807(ms). Execute id is 7.

添加复制映射, 注意这里用户名和表名要大写,否则会提示对象不存在

SQL  SP_RPS_ADD_TAB_MAP(REPhy2wy ,  HY ,  T1 ,  WY ,  T1 , 0);
DMSQL executed successfully
used time: 4.495(ms). Execute id is 10.

提交设置

SQL  SP_RPS_SET_APPLY();
DMSQL executed successfully
used time: 00:00:05.038. Execute id is 12.
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 1 1 1 2 /dm_home/dmdba/dmdbms/dmreplog -1 0 NULL 1 NULL hy 到 wy 的同步复制
used time: 0.534(ms). Execute id is 13.
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 1 1 -1 0 NULL 0 NULL
2 wy 1 2 -1 0 NULL 0 NULL
used time: 0.499(ms). Execute id is 14.
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 1 HY T1 150995951 1297 WY T1 150995951 1296 0
used time: 0.523(ms). Execute id is 15.
SQL  select * from SYSREP.RPS_FAULT_HISTORY;
no rows
used time: 1.136(ms). Execute id is 16.
SQL  select * from SYSREP.RPS_CONFLICTS;
no rows
used time: 1.336(ms). Execute id is 17.
SQL  select * from SYSREP.RPS_TIMERS;
no rows
used time: 0.987(ms). Execute id is 18.

至此,表复制完成。注意一点,DM 的复制配置必须在开始复制配置之前执行 SP_RPS_SET_BEGIN,配置完成之后执行 SP_RPS_SET_APPLY 提交。
验证同步
主库的逻辑日志:

[root@jydm2 dmreplog]# ls -lrt
总用量  4
-rw-r--r-- 1 dmdba dinstall 48 10 月  21 08:24 llog_arch_file_20141021082409.log

主库对 T1 表插入数据:

[dmdba@jydm2 bin]$ ./disql hy/hy
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 6.047(ms)
disql V7.1.6.46-Build(2018.02.08-89107)ENT 
Connected to: DM 7.1.6.46
SQL  select * from t1;
no rows
used time: 0.998(ms). Execute id is 4.
S SQL  insert into t1 values(2, hy2 
affect rows 1
used time: 0.777(ms). Execute id is 8.
SQL  commit;
executed successfully
used time: 1.141(ms). Execute id is 9.
SQL  select * from t1;
LINEID ID USERNAME
---------- -- --------
1 1 hy
2 2 hy2
used time: 0.403(ms). Execute id is 10.

从库查询:同步成功,主库之前的数据无法同步过来,只对后来操作的数据有效

[dmdba@jydm3 bin]$ ./disql wy/wy
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 5.844(ms)
disql V7.1.6.46-Build(2018.02.08-89107)ENT 
Connected to: DM 7.1.6.46
SQL  select * from t1; 
LINEID ID USERNAME
---------- -- --------
1 1 hy
2 2 hy2
used time: 0.618(ms). Execute id is 9.

在主库中更新记录

SQL  update t1 set username= hy1  where id=1;
affect rows 1
used time: 1.427(ms). Execute id is 11.
SQL  commit;
executed successfully
used time: 0.869(ms). Execute id is 12.
SQL  select * from t1;
LINEID ID USERNAME
---------- -- --------
1 1 hy1
2 2 hy2
used time: 0.339(ms). Execute id is 13.

查看从库记录

SQL  select * from t1; 
LINEID ID USERNAME
---------- -- --------
1 1 hy1
2 2 hy2
used time: 1.272(ms). Execute id is 12.

主库删除 T1 表的所有数据:

SQL  truncate table t1;
executed successfully
used time: 3.283(ms). Execute id is 14.

从库的所有数据也删除了

SQL  select * from t1;
no rows
used time: 0.793(ms). Execute id is 15.

整个复制的环境中,逻辑日志仅存在主库中。
我们配置的是同步的复制,如果想改成异步同步可以添加个计时器,比如:
SP_RPS_ADD_TIMER(hy2wy_TIMER , 从 hy 到 wy 定时复制 ,1,0,0,0, 23:18:33 ,NULL, 2019-12-18 23:18:33 ,NULL,1);
SP_RPS_REP_RESET_TIMER(REPhy2wy , hy2wy_TIMER

若需要删除复制组,则该复制组不能处于配置阶段,即该组的配置已经提交或取消。
监控数据复制
配置完成后复制服务器 RPS 虽然不参与复制的具体执行,但是在复制过程中,还是建议保持 RPS 的运行来对复制进行监控。
复制系统内,状态分为复制节点的状态和复制关系的状态。具体内容见下表。

复制节点的系统状态在 SYSREP.RPS_INSTANCES 中的 VALID_FLAG 字段表示;网络状态在 SYSREP.RPS_INSTANCES 表中 NET_VALID_FLAG 的字段表示。
复制关系的状态在 SYSREP.RPS_REPLICATIONS 中的 VALID_FLAG 字段表示。

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 1 1 1 2 /dm_home/dmdba/dmdbms/dmreplog -1 0 NULL 1 NULL hy 到 wy 的同步复制
used time: 1.339(ms). Execute id is 23.
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 1 1 -1 0 NULL 0 NULL
2 wy 1 2 -1 0 NULL 0 NULL
used time: 0.574(ms). Execute id is 24.

复制系统的配置信息可以通过在复制 RPS 上查询系统表来实现。在 RPS 上,复制相关的信息都在 SYSREP 模式中。
复制的监视按复制组为单位进行,RPS 每隔 1 分钟轮询探查所有的复制组,在每个复制组内,依次探测各个复制节点,要求其返回复制节点本身的状态和其所涉及的复制的状态。
这里需要特别说明的是节点的系统异常状态是指该节点在复制环境中的状态,是一个推测值。当 RPS 无法得到节点的返回消息,其他节点的返回消息中所有涉及到该节点的复制关系都是异常时,RPS 就认为该节点系统异常。
若复制结点或复制关系发生异常,这些异常都会记录在 SYSREP.RPS_FAULT_HISTORY 表中。若其 END_TIME 字段为 NULL,表示该故障还没有结束,管理员需尽快检查复制节点的状态及其网络连接。

SQL  select * from SYSREP.RPS_CONFLICTS;
no rows
used time: 1.336(ms). Execute id is 17.

DM7 并没有特意设置对错误历史的管理接口,管理员可以通过对 SYSREP.RPS_FAULT_HISTORY 表的删除和查询来实现错误记录的管理。
至此,复制环境配置完成。以上的例子只是一个最简单的复制环境。复制的配置灵活,在同一个复制组内,一个主服务器可以有多个从服务器,一个复制节点可以既是主服务器又是从服务器。管理员可以根据实际需要,配置出对称、一对多、多对一、级联、循环的复制环境。
在配置过程中或配置完成后,可以对复制的配置进行修改。修改包括复制组、复制关系、复制对象的删除和复制关系属性的修改。这些修改操作都必须在开始复制 SP_RPS_SET_BEGIN 和提交复制 SP_RPS_SET_APPLY 之间进行。若需要删除复制组,则该复制组不能处于配置阶段,即该组的配置已经提交或取消。
添加一个定时器,将同步复制修改为异步复制

SQL  SP_RPS_ADD_TIMER(hy2wy_TIMER , 从 hy 到 wy 定时复制 ,1,0,0,0, 23:18:33 ,NULL, 2019-12-18 23:18:33 ,NULL,1);
SP_RPS_ADD_TIMER(hy2wy_TIMER , 从 hy 到 wy 定时复制 ,1,0,0,0, 23:18:33 ,NULL, 2019-12-18 23:18:33 ,NULL,1);
[-8702]:group not set begin.
used time: 33.874(ms). Execute id is 0.

提示复制组设置没有开始所以不能进行修改

SQL  SP_RPS_SET_BEGIN( REP_GRP_hy2wy 
DMSQL executed successfully
used time: 0.481(ms). Execute id is 26.

设置时间开始时间为 2019-12-18 23:38:33

SQL  SP_RPS_ADD_TIMER(hy2wy_TIMER , 从 hy 到 wy 定时复制 ,1,0,0,0, 23:38:33 ,NULL, 2019-12-18 23:38:33 ,NULL,1);
DMSQL executed successfully
used time: 13.217(ms). Execute id is 29.
SQL  SP_RPS_REP_RESET_TIMER( REPhy2wy , hy2wy_TIMER 
DMSQL executed successfully
used time: 0.790(ms). Execute id is 30.
SQL  SP_RPS_SET_APPLY();
DMSQL executed successfully
used time: 24.494(ms). Execute id is 31.

现在在主库中插入数据

SQL  select * from t1;
LINEID ID USERNAME
---------- -- --------
1 1 hy
used time: 2.296(ms). Execute id is 4.
SQL  insert into t1 values(2, hy2 
affect rows 1
used time: 1.519(ms). Execute id is 5.
SQL  commit;
executed successfully
used time: 1.430(ms). Execute id is 6.
SQL  select * from t1;
LINEID ID USERNAME
---------- -- --------
1 1 hy
2 2 hy2
used time: 0.512(ms). Execute id is 8.

在从库中查询记录

SQL  select * from t1;
LINEID ID USERNAME
---------- -- --------
1 1 hy
used time: 0.337(ms). Execute id is 8.
SQL  select sysdate;
LINEID SYSDATE 
---------- ---------------------------
1 2019-12-18 23:38:37.570259
used time: 0.263(ms). Execute id is 9.

可以看到在时间 2019-12-18 23:38:37.570259 时间点表数据还没有同步到从库

SQL  select sysdate;
LINEID SYSDATE 
---------- ---------------------------
1 2019-12-18 23:39:05.629576
used time: 0.432(ms). Execute id is 12.
SQL  select * from t1;
LINEID ID USERNAME
---------- -- --------
1 1 hy
2 2 hy2
used time: 0.458(ms). Execute id is 13.

可以看到在时间 2019-12-18 2019-12-18 23:39:05.629576 时间点表数据已经同步到从库

删除复制映射

SQL  SP_RPS_DROP_TAB_MAP( REPhy2wy ,  HY ,  T1 ,  WY ,  T1 
DMSQL executed successfully
used time: 1.485(ms). Execute id is 36.

修改复制的错误超时时间,超时的时间单位是秒

SQL  SP_RPS_SET_ROUTE_FAULT_TIMEOUT(REPhy2wy , 60);
DMSQL executed successfully
used time: 0.791(ms). Execute id is 37.

删除复制关系

SQL  SP_RPS_DROP_REPLICATION( REPhy2wy 
DMSQL executed successfully
used time: 1.807(ms). Execute id is 38.

删除整个复制组

SQL  SP_RPS_DROP_GROUP( REP_GRP_hy2wy 
DMSQL executed successfully
used time: 1.807(ms). Execute id is 39.

删除数据复制所使用的用户和系统表

SQL  SP_INIT_REP_SYS(0);
DMSQL executed successfully
used time: 160.803(ms). Execute id is 51.
SQL  select * from SYSREP.RPS_INSTANCES;
select * from SYSREP.RPS_INSTANCES;
[-2103]:Error in line: 1
Invalid schema name [SYSREP].
used time: 0.735(ms). Execute id is 0.

另外,在配置或修改配置时想要取消操作,可以使用如下系统过程结束配置。

SQL  SP_RPS_SET_CANCEL();
DMSQL executed successfully
used time: 0.749(ms). Execute id is 40.

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-18发表,共计21878字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)