概述
达梦数据复制(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_flag
为 1
时表示创建用户和系统表,为 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();
遇到的坑
我在添加复制映射时,首先添加的是表级复制映射,当删除整个复制组,重新添加模式级复制映射时,发现之前添加过表级复制映射的表,不会自动复制,而其他表是可以的。后来通过将主从服务器的这张表删除后,重新导入就又可以自动复制了。
当修改了复制关系或复制映射时,可能会造成某些表不生效的情况,这时候只需要重启达梦数据库即可。