欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

达梦DM8主从复制配置实战

程序员文章站 2022-06-02 21:59:21
...

概述

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

说明

搭建达梦DM8主从复制需要至少三台服务器(主服务器从服务器复制服务器(RPS))。
主服务器为发起复制操作的服务器,从服务器为接收主服务器发送的数据并进行复制的服务器。复制服务器(RPS)在数据复制环境中,负责配置复制环境,定义复制关系的服务器。RPS 有且仅有一台,它只负责配置和监控,并不参与到复制过程中。

准备工作

参与复制的实例信息:

服务器 实例名 IP 地址 服务器端口号 MAL 端口号 文件目录
复制服务器 TESTA 172.16.143.102 5236 5241 E:\server\dmdbms\data\TEST
主服务器 TESTB 172.16.143.103 5236 5242 /www/dm8/data/TEST/arch
从服务器 TESTC 172.16.143.104 5236 5243 /www/dm8/data/TEST/arch

参数设置

配置dm.ini

配置dm.ini,分别修改dm.ini中对应项如下表所示。

服务器 dm.ini 设置
复制服务器 INSTANCE_NAME = TESTA
PORT_NUM = 5236
MAL_INI = 1
主服务器 INSTANCE_NAME = TESTB
PORT_NUM = 5236
MAL_INI = 1
从服务器 INSTANCE_NAME = TESTC
PORT_NUM = 5236
MAL_INI = 1

配置dmmal.ini

在数据库文件目录,找到dmmal_example.ini,复制一份为dmmal.ini
在文件末尾添加内容:

MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME		=	TESTA
MAL_HOST		=	172.16.143.102
MAL_PORT		=	5241
MAL_INST_PORT		=	5236
MAL_INST_HOST		=	172.16.143.102

[MAL_INST2]
MAL_INST_NAME		=	TESTB
MAL_HOST		=	172.16.143.103
MAL_PORT		=	5242
MAL_INST_PORT		=	5236
MAL_INST_HOST		=	172.16.143.103

[MAL_INST3]
MAL_INST_NAME		=	TESTC
MAL_HOST		=	172.16.143.104
MAL_PORT		=	5243
MAL_INST_PORT		=	5236
MAL_INST_HOST		=	172.16.143.104

每个节点的 dmmal.ini 配置必须一致,一个节点配置好后可直接拷贝到另外两个节点。

复制服务器初始化

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

复制环境的配置

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

  • 2 登录 RPS A,保证服务器状态为 OPEN,开始复制配置。
    查看数据库状态:select name,instance_name,start_time,status$ from v$instance;

  • 3 创建复制组 TESTB_TO_TESTC

SP_RPS_ADD_GROUP('TESTB_TO_TESTC', '主从同步复制');

注:第一个参数为创建的复制组名称,第二个参数为复制组描述

  • 4开始复制设置
SP_RPS_SET_BEGIN('TESTB_TO_TESTC');

注:第一个参数为复制组名称

  • 5 添加复制关系
SP_RPS_ADD_REPLICATION ('TESTB_TO_TESTC', 'REPB2C', 'B 到 C 的同步复制', 'TESTB', 'TESTC', NULL, '/www/dm8/data/TEST/arch');

注:第一个参数为复制组名,第二个参数为复制名(必须在 RPS 上唯一),第三个参数为复制描述,第四个参数为主服务器实例名,第五个参数为从服务器实例名,第六个参数为复制定时器名(借助定时器,可以设置复制数据的同步时机。如果是同步复制则为 NULL),第7个参数为主服务器上逻辑日志的完整归档路径。

  • 6添加复制映射
    复制映射分为库级模式级表级三个级别。
    其中表级要求源表和目标表结构完全一致,库级和模式级没有要求。库级和模式级复制映射会将其 DDL 也进行复制。复制映射包括只读模式和非只读模式。对于只读模式的映射,映射的目的表禁止用户更新。

  • 6-1模式级复制映射

SP_RPS_ADD_SCH_MAP('REPB2C', 'TEST', 'TEST', 0);

注:模式级复制映射。第一个参数为复制关系名,第二个参数为主服务器模式名,第三个参数为从服务器模式名,第四个参数为只读复制模式(1 表示只读模式,从服务器只接受复制更新,0 表示非只读模式)

  • 6-2表级复制映射
SP_RPS_ADD_TAB_MAP('REPB2C', 'TEST', 'articles', 'TEST', 'articles', 0);

注:添加表级复制映射。第一个参数为复制关系名,第二个参数为主服务器模式名,第三个参数为主服务器表名,第四个参数为从服务器模式名,第五个参数为从服务器表名,第六个参数为只读复制模式(1 表示只读模式,从服务器只接受复制更新,0 表示非只读模式)

  • 7提交设置
SP_RPS_SET_APPLY();

至此,复制环境配置完成。

在配置过程中或配置完成后,可以对复制的配置进行修改。修改包括复制组、复制关系、复制对象的删除和复制关系属性的修改。这些修改操作都必须在开始复制SP_RPS_SET_BEGIN 和提交复制 SP_RPS_SET_APPLY 之间进行。若需要删除复制组,则该复制组不能处于配置阶段,即该组的配置已经提交或取消。

其他

  • 删除复制映射
SP_RPS_DROP_TAB_MAP('REPB2C', 'TEST', 'articles', 'TEST', 'articles');

注:删除表级复制映射。第一个参数为复制关系名,第二个参数为主表模式名,第三个参数为主表名,第四个参数为从表模式名,第五个参数为从表名

  • 添加一个定时器,将同步复制修改为异步复制
SP_RPS_ADD_TIMER('B2C_TIMER','',1,0,0,0,'19:50:33',NULL,'2011-08-2419:50:33',NULL,1);
SP_RPS_REP_RESET_TIMER('REPB2C','B2C_TIMER');

具体参数说明请看DM8 SQL.pdf

  • 删除复制关系
SP_RPS_DROP_REPLICATION('REPB2C');
  • 删除整个复制组
SP_RPS_DROP_GROUP('TESTB_TO_TESTC');
  • 在配置或修改配置时想要取消操作,可以使用如下系统过程结束配置
SP_RPS_SET_CANCEL();

遇到的坑

我在添加复制映射时,首先添加的是表级复制映射,当删除整个复制组,重新添加模式级复制映射时,发现之前添加过表级复制映射的表,不会自动复制,而其他表是可以的。后来通过将主从服务器的这张表删除后,重新导入就又可以自动复制了。

当修改了复制关系或复制映射时,可能会造成某些表不生效的情况,这时候只需要重启达梦数据库即可。

相关标签: 达梦 达梦