前言
-
创建实例的时候,数据库名字就是
/opt/dmdbs/data
目录下数据目录的名字/opt/dmdbms/data/DAMENG
-
创建实例的时候,实例的名字就是
systemd
的service
的名字(DmService+name
)DmServiceDMSERVER.service
-
启动不同的地方就是配置文件的不同,配置文件在数据目录下的
dm.ini
/opt/dmdbms/data/DAMENG/dm.ini
-
登录数据库
export PATH=$PATH:/opt/dmdbms/bin disql SYSDBA/SYSDBA@localhost:5236 ~~ select table_name,owner from all_tables; select table_name from user_tables;
达梦数据库主备搭建
-
主备都创建数据库,库名都是
dmrw
,但是实例名不一样,主dmrw1
,备dmrw2
-
主备份数据
systemctl stop DmServicedmrw1.service cd /opt/dmdbms/bin su dmdba -c ./dmrman backup database '/opt/dmdbms/data/dmrw/dm.ini' backupset '/opt/dmdbms/backfull'; scp -r /opt/dmdbms/backfull 192.168.31.24:/opt/dmdbms/backfull
-
复制数据到备然后恢复
systemctl stop DmServicedmrw2.service cd /opt/dmdbms chown dmdba.dinstall -R backfull/ cd /opt/dmdbms/bin su dmdba -c ./dmrman restore database '/opt/dmdbms/data/dmrw/dm.ini' from backupset '/opt/dmdbms/backfull'; recover database '/opt/dmdbms/data/dmrw/dm.ini' from backupset '/opt/dmdbms/backfull'; recover database '/opt/dmdbms/data/dmrw/dm.ini' update db_magic;
-
主配置修改
vi /opt/dmdbms/data/dmrw/dm.ini INSTANCE_NAME = DMRW1 MAL_INI = 1 ARCH_INI = 1 ALTER_MODE_STATUS = 0 ENABLE_OFFLINE_TS = 2 DW_PORT = 33141
-
备配置修改
vi /opt/dmdbms/data/dmrw/dm.ini INSTANCE_NAME = DMRW2 MAL_INI = 1 ARCH_INI = 1 ALTER_MODE_STATUS = 0 ENABLE_OFFLINE_TS = 2 DW_PORT = 33141
-
主库添加内容
cat > /opt/dmdbms/data/dmrw/dmarch.ini << EOF [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = DMRW2 #实时归档目标实例名(主库侧填写备库实例名) [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /home/dmdba/dmdbms/arch #本地归档文件存放路径 ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 10240 #单位 MB,0 表示无限制,范围 1024~4294967294 MB EOF
-
备库添加内容
cat > /opt/dmdbms/data/dmrw/dmarch.ini << EOF [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = DMRW1 #实时归档目标实例名(备库侧填写主库实例名) [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /home/dmdba/dmdbms/arch #本地归档文件存放路径 ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 10240 #单位 MB,0 表示无限制,范围 1024~4294967294 MB EOF
-
主库、备库添加内容,一样
cat > /opt/dmdbms/data/dmrw/dmmal.ini << EOF MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = DMRW1 #与 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.31.23 #MAL 系统监听 TCP 内部网络 IP MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.31.23 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口 #MAL_INST_DW_PORT = 33141 [MAL_INST2] MAL_INST_NAME = DMRW2 #与 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.31.24 # MAL 系统监听 TCP 内部网络 IP MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.31.24 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口 #MAL_INST_DW_PORT = 33141 EOF
-
主库、备库添加内容,一样
cat > /opt/dmdbms/data/dmrw/dmwatcher.ini << EOF [GRP_RW] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #自动切换模式 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_OGUID = 453331 #守护系统唯一 OGUID 值 INST_INI = /opt/dmdbms/data/dmrw/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动 EOF
-
以
mount
方式启动数据库(主备都启动)cd /opt/dmdbms chown dmdba.dinstall -R data/ cd /opt/dmdbms/bin su dmdba ./dmserver /opt/dmdbms/data/dmrw/dm.ini mount # 在另一个终端修改 cd /opt/dmdbms/bin ./disql SYSDBA/SYSDBA@localhost sp_set_oguid(453331); alter database primary; (主库设置为primary) alter database standby; (备库设置为standby) #主库生成dmwatcher.ctl文件拷贝到备库上,要求两个文件是一样的,都是主库生成的 su dmdba ./dmctlcvt TYPE=3 SRC=/opt/dmdbms/data/dmrw/dmwatcher.ini DEST=/opt/dmdbms/data/dmrw/ cp /opt/dmdbms/data/dmrw/GRP_RW/dmwatcher.ctl /opt/dmdbms/data/dmrw/ scp /opt/dmdbms/data/dmrw/dmwatcher.ctl 192.168.31.24:/opt/dmdbms/data/dmrw/dmwatcher.ctl chown dmdba.dinstall -R data/ systemctl start DmServicedmrw2 DmWatcherServicedmrw # 注册服务 ./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /opt/dmdbms/data/dmrw/dmwatcher.ini ./dm_service_installer.sh -t dmserver -p dmrw -dm_ini /opt/dmdbms/data/dmrw/dm.ini ./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /home/dmdba/dmmonitor.ini systemctl start DmServicedmrw systemctl start DmWatcherServicedmrw systemctl start DmMonitorServiceconfirm
-
确认监视器,第三个节点,确认监视器只能有一个运行
cat > /home/dmdba/dmmonitor.ini << EOF MON_DW_CONFIRM = 1 #确认监视器模式 MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径 MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32 MB MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间 [GRP_RW] MON_INST_OGUID = 453331 #组 GRP_RW 的唯一 OGUID 值 #以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置 #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 192.168.31.23:52141 MON_DW_IP = 192.168.31.24:52141 EOF chown dmdba.dinstall -R /home/dmdba
-
启动监视器
su dmdba ./dmmonitor /home/dmdba/dmmonitor.ini show 查看状态 # 或者注册服务,但是无法使用命令交互 ./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /home/dmdba/dmmonitor.ini systemctl start DmMonitorServiceconfirm
注意:查看状态时除了IP、INAME、INODE不一样外,其它的值都是一样的,否则会出现数据不同步的情况
show
2022-05-12 17:49:29
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP_RW 453331 TRUE AUTO FALSE
IP INST_PORT MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INST_OK INAME ISTATUS IMODE RTYPE RSTAT N_OPEN N_TASK TASK_MEM_USED FLSN CLSN SSLSN SLSN
192.168.31.24 5236 52141 2022-05-12 17:49:29 GLOBAL VALID OPEN OK DMRW2 OPEN STANDBY REALTIME VALID 4 0 0 58696 58696 58696 58696
192.168.31.23 5236 52141 2022-05-12 17:49:29 GLOBAL VALID OPEN OK DMRW1 OPEN PRIMARY REALTIME VALID 4 0 0 58696 58696 58696 58696
- 验证主播集群同步状态,使用普通监视器查看,普通监视器可以有多个
cat > /home/dmdba/dmmonitor.ini << EOF MON_DW_Confirm = 0 #普通监视器模式 MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径 MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32 MB MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间 [GRP_RW] MON_INST_OGUID = 453331 #组 GRP_RW 的唯一 OGUID 值 #以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置 #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 192.168.31.23:52141 MON_DW_IP = 192.168.31.24:52141 EOF chown dmdba.dinstall -R /home/dmdba
- 启动监视器
./dmmonitor /home/dmdba/dmmonitor.ini show
- 客户端连接集群
客户端主机上需要配置dm_svc.conf
文件(未安装DM
数据库的机器新建即可),文件路径:/etc/dm_svc.conf
# 全局配置区 DMRW=(192.168.31.23:5236,192.168.31.24:5236) TIME_ZONE=(+480) #表示+8:00 时区 LOGIN_ENCRYPT=(0) DIRECT=(Y) # 服务配置区 [DMRW] TIME_ZONE=(+540) #表示+9:00 时区 LOGIN_MODE=(1) SWITCH_TIME=(3) SWITCH_INTERVAL=(10)
客户端程序连接数据库时,需要指定
IP
端口处替换为服务名即可,例如:
disql SYSDBA/SYSDBA@DMRW
disql SYSDBA/SYSDBA@DMRW
- 测试数据及主备手动切换
create table test(id int); insert into test values (1); commit; select * from test; ~~~ 手动切换数据库,普通监视器执行,需要登录 login SYSDBA SYSDBA switchover GRP_RW.DMRW2 组名GRP_RW就是上面提示的GROUP
后记
本文章由我海哥提供!
本文作者为olei,转载请注明。
您好~我是腾讯云+社区的运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物。