签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦数据库 模式级 数据复制(DATA REPLICATION) 搭建手册

2019-09-06 14:00 6186 0 原创 DM 达梦
作者: dave

在之前的博客我们了解了DM 数据复制的相关概念和表级复制的搭建过程,如下:

DM7 达梦数据库 数据复制概念 及 配置存储过程 说明
https://www.cndba.cn/dave/article/3648
DM7 达梦数据库 表级 数据复制(DATA REPLICATION) 搭建手册
https://www.cndba.cn/dave/article/3651

http://www.cndba.cn/cndba/dave/article/3652

DM 的数据复制可以在表级,模式级和库级进行配置,本篇我们看下表级数据复制的配置过程。http://www.cndba.cn/cndba/dave/article/3652

表级复制因为不能同步DDL,所以必须要求主从段表的结构必须完全一致。 根据官网的说明,模式级则会同步DDL,所以没有这个限制。下面我们看模式级数据复制的配置。http://www.cndba.cn/cndba/dave/article/3652

1 准备工作

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

http://www.cndba.cn/cndba/dave/article/3652

数据库 实例名 IP地址 数据库端口号 MAL端口号 文件目录
复制数据库 China 192.168.20.191 5236 5241 /dm/dmdbms/data
主数据库 AnQing 192.168.20.192 5236 5242 /dm/dmdbms/data
从数据库 HeFei 192.168.20.193 5236 5243 /dm/dmdbms/data

我们将 AnQing 上的AnQing用户同步到HeFei 上的HeFei用户。http://www.cndba.cn/cndba/dave/article/3652

实例的创建参考我的博客,如下,这里不在描述:

http://www.cndba.cn/cndba/dave/article/3652

DM7 达梦数据库 通过dminit 创建 并 注册 数据库实例
https://www.cndba.cn/dave/article/3580

2 参数设置

2.1 配置dm.ini 文件

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

数据库 dm.ini 设置
复制数据库 INSTANCE_NAME = China
PORT_NUM = 5236
MAL_INI = 1
主数据库 INSTANCE_NAME = AnQing
PORT_NUM = 5236
MAL_INI = 1
从数据库 INSTANCE_NAME = HeFei
PORT_NUM = 5236
MAL_INI = 1

2.2 配置dmmal.ini 文件

修改dmmal.ini文件,添加如下内容。Dmmal 配置文件默认没有,可以从示例目录下复制过来修改。

http://www.cndba.cn/cndba/dave/article/3652

[dave@www.cndba.cn1 ini_script]$ pwd
/dm/dmdbms/samples/ini_script
[dave@www.cndba.cn1 ini_script]$ ll
总用量 48
-rwxr-xr-x 1 dmdba dinstall  890  2月 23 2029 dmarch_example.ini
-rwxr-xr-x 1 dmdba dinstall 1966  2月 23 2029 dmdcr_cfg_example.ini
-rwxr-xr-x 1 dmdba dinstall  631  2月 23 2029 dmdcr_example.ini
-rwxr-xr-x 1 dmdba dinstall 1537  2月 23 2029 dminit_example.ini
-rwxr-xr-x 1 dmdba dinstall 2070  2月 23 2029 dmmal_example.ini
-rwxr-xr-x 1 dmdba dinstall 1277  2月 23 2029 dmmonitor_example.ini
-rwxr-xr-x 1 dmdba dinstall  288  2月 23 2029 dmmpp_example.ini
-rwxr-xr-x 1 dmdba dinstall 1679  2月 23 2029 dmtimer_example.ini
-rwxr-xr-x 1 dmdba dinstall 2146  2月 23 2029 dmwatcher_example.ini
-rwxr-xr-x 1 dmdba dinstall 1241  2月 23 2029 dmwatch_example.ini
-rwxr-xr-x 1 dmdba dinstall  522  2月 23 2029 dmwmon_example.ini
-rwxr-xr-x 1 dmdba dinstall  636  2月 23 2029 sqllog_example.ini
[dave@www.cndba.cn1 ini_script]$

每个站点的 dmmal.ini 配置必须一致,我们这里直接touch文件并粘贴内容:

http://www.cndba.cn/cndba/dave/article/3652

MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5

[MAL_China]
MAL_INST_NAME = China
MAL_HOST = 192.168.20.191
MAL_PORT = 5241
MAL_INST_PORT = 5236 
MAL_INST_HOST = 192.168.20.191

[MAL_AnQing]
MAL_INST_NAME = AnQing
MAL_HOST = 192.168.20.192
MAL_PORT = 5242
MAL_INST_PORT = 5236 
MAL_INST_HOST = 192.168.20.192

[MAL_HeFei] 
MAL_INST_NAME = HeFei
MAL_HOST = 192.168.20.193
MAL_PORT = 5243
MAL_INST_PORT = 5236 
MAL_INST_HOST = 192.168.20.193

3 复制数据库初始化

  配置数据复制在 RPS(复制数据库:China) 上进行,在配置数据复制之前,需要保证复制数据库和所有待配置节点的实例名各不相同,配置好其 MAL 系统并保证网络环境正常。按照复制组、复制关系、复制表映射的顺序配置复制环境。
  注意:MAL 系统是基于 TCP 协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。

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

  执行系统函数 SP_INIT_REP_SYS(1)创建的复制用户SYSREP,该用户默认密码也是SYSREP,具有RESOURCE的角色。

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

1)复制组表(SYSREP.RPS_GROUPS)
2)复制节点实例表(SYSREP.RPS_INSTANCES)
3)复制关系表(SYSREP.RPS_REPLICATIONS)
4)复制映射表( SYSREP.RPS_TABMAPS)
5)故障历史表(SYSREP.REP_FAULT_HISTORY)
6)冲突历史表( SYSREP.RPS_CONFLICTS)
7)复制定时器表(SYSREP.RPS_TIMERS)

开始初始化:

SQL> SP_INIT_REP_SYS(1);
DMSQL executed successfully
used time: 20.316(ms). Execute id is 835.
SQL> 
SQL> conn SYSREP/SYSREP

Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 9.226(ms)
SQL> 
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: 32.359(ms). Execute id is 837.
SQL>

4 配置表级复制

配置复制涉及到存储过程说明可以参考如下博客:

http://www.cndba.cn/cndba/dave/article/3652

DM7 达梦数据库 数据复制概念 及 配置存储过程 说明
https://www.cndba.cn/dave/article/3648

这里看具体的配置步骤。

4.1 启动DB

启动 3 台数据库,启动的顺序不分先后。

[dmdba@dm2 AnQing]$ service DmServiceAnQing start
Starting DmServiceAnQing:                                  [ OK ]
[dmdba@dm2 AnQing]$ 
[dmdba@dm3 HeFei]$ service DmServiceHeFei start
Starting DmServiceHeFei:                                   [ OK ]
[dmdba@dm3 HeFei]$

4.2 配置模式级复制

登录 RPS (China),配置复制:

#创建复制组 REP_GRP_B2C
SQL> SP_RPS_ADD_GROUP('REP_GRP_AnQing2HeFei', '主从同步复制');
DMSQL executed successfully
used time: 40.909(ms). Execute id is 838.
SQL> 

#开始设置
SQL> SP_RPS_SET_BEGIN('REP_GRP_AnQing2HeFei');
DMSQL executed successfully
used time: 0.733(ms). Execute id is 839.

#添加复制关系
SQL> SP_RPS_ADD_REPLICATION ('REP_GRP_AnQing2HeFei', 'REPAnQing2HeFei', 'AnQing 到 HeFei 的同步复制', 'AnQing', 'HeFei', NULL, '/dm/dmreplog');
DMSQL executed successfully
used time: 6.277(ms). Execute id is 840.
SQL> 

#先删除掉之前配置的表级复制:
SQL> SP_RPS_DROP_TAB_MAP('REPAnQing2HeFei', 'ANQING', 'T1', 'HEFEI', 'T1');
DMSQL executed successfully
used time: 3.181(ms). Execute id is 870.
SQL> 

#添加模式级复制:
SQL> SP_RPS_ADD_SCH_MAP('REPAnQing2HeFei', 'ANQING', 'HEFEI', 0);
DMSQL executed successfully
used time: 4.166(ms). Execute id is 871.
SQL> 

#提交设置
SQL> SP_RPS_SET_APPLY();
DMSQL executed successfully
used time: 00:00:05.281. Execute id is 872.

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

若需要删除复制组,则该复制组不能处于配置阶段,即该组的配置已经提交或取消。

其他的复制配置比如对修改复制组,修改复制关系,删除映射等可以参考之前的博客:http://www.cndba.cn/cndba/dave/article/3652

DM7 达梦数据库 数据复制概念 及 配置存储过程 说明
https://www.cndba.cn/dave/article/3648

4.3 验证同步

#先测试DML操作:在主库insert 数据:
SQL> insert into t1 select * from sysobjects;
affect rows 1278

used time: 17.176(ms). Execute id is 864.
SQL> commit;
executed successfully
used time: 6.708(ms). Execute id is 865.
SQL> 

#从库查询,同步成功:
SQL> select count(1) from t1;

LINEID     COUNT(1)            
---------- --------------------
1          1278

used time: 0.604(ms). Execute id is 3402.
SQL> 

#在AnQing 用户下创建对象并插入数据:
[dmdba@dm2 AnQing]$ disql AnQing/"www.cndba.cn"

Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 19.346(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> create table huaining as select * from sysobjects;
executed successfully
used time: 25.089(ms). Execute id is 863.
SQL> 


到HeFei用户下查询:
SQL> select count(1) from huaining;
select count(1) from huaining;
[-2106]:Error in line: 1
Invalid table or view name [HUAINING].
used time: 0.951(ms). Execute id is 0.

注意这里提示对象不存在,说明DDL 没有同步过来,我们创建好表结构在测试,同步成功:
SQL> create table huaining as select * from sysobjects where 1=2;
executed successfully
used time: 9.689(ms). Execute id is 3408.
SQL>  select count(1) from huaining;

LINEID     COUNT(1)            
---------- --------------------
1          0

used time: 1.802(ms). Execute id is 3409.
SQL> select count(1) from huaining;

LINEID     COUNT(1)            
---------- --------------------
1          1278

但根据官方手册的说明,模式级的复制是支持DDL操作的。 因为我这里的复制从库是0级,就是非只读的,删除后重新添加1级,即只读模式在测试:

SQL> SP_RPS_SET_APPLY();
DMSQL executed successfully
used time: 00:00:05.281. Execute id is 872.
SQL> SP_RPS_SET_BEGIN('REP_GRP_AnQing2HeFei');
DMSQL executed successfully
used time: 0.662(ms). Execute id is 887.
SQL> SP_RPS_DROP_SCH_MAP('REPAnQing2HeFei', 'ANQING', 'HEFEI');
DMSQL executed successfully
used time: 3.662(ms). Execute id is 888.
SQL>  SP_RPS_ADD_SCH_MAP('REPAnQing2HeFei', 'ANQING', 'HEFEI', 1);
DMSQL executed successfully
used time: 4.169(ms). Execute id is 889.
SQL> SP_RPS_SET_APPLY();
DMSQL executed successfully
used time: 00:00:05.433. Execute id is 890.
SQL> 

再测试:
主库:
SQL> drop table huaining;
executed successfully
used time: 20.771(ms). Execute id is 876.
SQL> create table huaining as select * from sysobjects;
executed successfully
used time: 15.445(ms). Execute id is 877.
SQL> 

#从库:
SQL> select count(1) from huaining;
select count(1) from huaining;
[-2106]:Error in line: 1
Invalid table or view name [HUAINING].
used time: 0.900(ms). Execute id is 0.
SQL>

依旧没有成功。 虽然官方文档说模式级的数据复制支持DDL,但从测试看,DDL 无法同步。 下片我们看在DB级的数据复制是否支持DDL操作。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2297
    原创
  • 3
    翻译
  • 680
    转载
  • 200
    评论
  • 访问:10146897次
  • 积分:4578
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ