话不多说,上环境和操作方法:
一、环境准备
首先主备,要规划好机器的,我准备了两台机器,主节点master:192.168.107.111 ,从节点slave:192.168.107.112。
主节点数据库测试实例名:master 两者端口同为5240
从节点数据库测试实例名:slave
dm_ini文件位置:/DMINSTALL/database/dmsql/dm.ini
back备份位置:/DMINSTALL/back
arch归档文件存放路径:/DMINSTALL/arch
二、主备库数据同步
同步原理:主节点的数据备份,通过SCP到从节点,然后从节点回滚主节点的数据库备份文件,做到主从同步。
1、主从节点创建实例master:
./dminit PATH=/DMINSTALL/database/ DB_NAME=master INSTANCE_NAME=master PORT_NUM=5240
./dm_service_installer.sh -t dmserver -dm_ini /DMINSTALL/database/master/dm.ini -p master
2、主节点脱机备份
BACKUP DATABASE \'/DMINSTALL/database/master/dm.ini\' BACKUPSET \'/DMINSTALL/back\',执行完毕之后,会生成一个备份文件,通过scp命令传输到从库的/DMINSTALL/ 目录下面,若scp命令不熟悉的,可以利用xftp工具,手动拖包到从节点机器,该处注意back包的用户权限。
主节点的备份文件以及传过去了,那现在要干什么呢?
3、从库执行数据库还原。
从库:
RESTORE DATABASE \'/DMINSTALL/database/master/dm.ini\' FROM BACKUPSET \'/DMINSTALL/back\'
RECOVER DATABASE \'/DMINSTALL/database/master/dm.ini\' UPDATE DB_MAGIC
三、主从配置文件(配置文件路径无具体说明,都与dm.ini文件路径同级)
1、修改dm.ini
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI= 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
2、增加文件dmmal.ini
vim ./dmmal.ini
3、配置 vim./dmarch.ini
主节点:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = slave #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /DMINSTALL/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
从节点:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = master #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /DMINSTALL/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
4、配置守护进程 vim ./dmwatcher.ini
主库:
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /DMINSTALL/database/master/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /DMINSTALL/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
从库:
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /DMINSTALL/database/slave/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /DMINSTALL/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
四、启动主从库
首先启动主库:
以 Mount 方式启动主库
./dmserver /DMINSTALL/database/master/dm.ini mount
启动命令行工具 DIsql,登录主库设置 OGUID 值。主库修改数据库为 Primary 模式
SP_SET_PARA_VALUE(1, \'ALTER_MODE_STATUS\', 1);
sp_set_oguid(453331);
alter database primary;
SP_SET_PARA_VALUE(1, \'ALTER_MODE_STATUS\', 0);
从库操作一样(注意文件路径):
以 Mount 方式启动从库
./dmserver /DMINSTALL/database/slave/dm.ini mount
启动命令行工具 DIsql,登录备库设置 OGUID 值为 453331
SP_SET_PARA_VALUE(1, \'ALTER_MODE_STATUS\', 1);
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1, \'ALTER_MODE_STATUS\', 0);
五、配置监听dmmonitor.ini (改文件房主主从节点均可,只要配置其中一个)
因为之前已经规划好了主从节点,所以我把监听ini文件放在了主节点上面。
vim ./dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /DMINSTALL/jtlog #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.107.111:52141
MON_DW_IP = 192.168.107.112:52142
配置好监听之后,启动主从守护进程:
主: ./dmwatcher /DMINSTALL/database/master/dmwatcher.ini
从: ./dmwatcher /DMINSTALL/database/slave/dmwatcher.ini
启动监听
./dmmonitor /DMINSTALL/database/master/dmmonitor.ini
至此守护配置已完成。提示:如果到了这一步,监听不到从节点,在你确保你的配置文件没出错的前提下,一定要注意从节点的防火墙,我首次搭建也是监听不打,后面关闭防火墙重新启动监听,就可以了。
主备注册新的服务,登陆数据库测试验证
以上操作纯自己参考达梦官方文档和网上资料搭建的,如有错误的地方,欢迎广大道友指评批判。