1.系统(软硬件)环境
1.1服务器具体配置信息
名称 | cpu | 内存 | 硬盘 | 网卡 |
yzjdwp | 2c | 2G | 40G | 2块虚拟网卡 |
yzjdws | 2c | 2G | 40G | 2块虚拟网卡 |
yzjdwm | 2C | 2G | 40G | 2块虚拟网卡 |
1.2软件环境
操作系统 | 数据库版本 |
CentOS Linux release 8.2.2004 (Core) | dm8 |
1.3网络环境
2.安装前准备
2.1数据库存放路径规划
名称 | 存放路径 | 说明 |
安装路径 | /opt/dmdbms | DM安装程序文件和数据文件的路径,挂载在存储设备SSD上。 |
数据文件路径 | /data/dmdbms | |
归档日志文件路径 | /data/dmdbms/arch | 本地服务器的机械磁盘上,不要和上面存储设备在同一介质上。 |
备份文件路径 | /opt/dmbak |
2.2网络及端口规划
ip规划
主机类型 | ip | 实例名 |
主库 | 192.168.6.170(外部通信) | GRP1_RT_01 |
172.16.6.170(内部通信) | ||
备库 | 192.168.6.171(外部通信) | GRP1_RT_02 |
172.16.6.171(内部通信) | ||
确认监视器 | 192.168.6.172(外部通信) | |
172.16.6.172(内部通信) |
端口规划
实例名 | PORT_NUM | MAL_INST_DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PORT |
GRP1_RT_01 | 5236 | 5336 | 172.16.6.170 | 5436 | 5536 |
GRP1_RT_02 | 5236 | 5336 | 172.16.6.171 | 5436 | 5536 |
其中端口作用:
PORT_NUM:是数据库实例的监听端口,监听用户的连接请求,dmmal.ini中的[MAL_INST_NAME:MAL_INST_PORT]要与 dm.ini 中的[INSTANCE_NAME: PORT_NUM]保持一致。
MAL_INST_DW_PORT :实例对守护进程的监听端口,守护进程使用 MAL_HOST + MAL_INST_DW_PORT 创建到实例的 TCP 连接。
MAL_HOST:内网ip地址
MAL IP :地址,使用 MAL_HOST + MAL_PORT 创建 MAL 链路
MAL_PORT MAL: 监听端口,用于创建 MAL 链路,同一个实例的 MAL 配置项中,MAL_PORT 不能和实例 dm.ini 中的两个端口相同,避免端口绑定冲突。
MAL_DW_PORT: 守护进程监听端口,其他守护进程或监视器使用 MAL_HOST + MAL_DW_PORT 创建 TCP连接。监视器配置文件 dmmonitor.ini 中,MON_DW_IP 就是一组 MAL_HOST:MAL_DW_PORT。2.3配置操作系统环境
2.3.1关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
2.3.2关闭selinux
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
2.3.3重启操作系统
[root@localhost ~]# reboot
2.3.4修改主机名
[root@localhost ~]# hostname
localhost.localdomain ##dm数据库的安装在生产中要慎重考虑主机名,避免二次修改。
[root@localhost ~]# hostnamectl set-hostname yzjdwp/yzjdws/yzjdwm
[root@localhost ~]# hostname ##验证是否成功
2.3.5修改内核参数
[root@localhost ~]# cat /etc/sysctl.conf
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmall = 6710886
kernel.shmmax = 27487790694
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.swappiness = 0
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
[root@localhost ~]# /sbin/sysctl -p //执行生效
2.3.6添加下列参数到/etc/security/limits.conf
* soft nproc 652141
* hard nproc 652141
* soft nofile 652141
* hard nofile 652141
2.3.7添加下列条目到/etc/pam.d/login
session required /lib64/security/pam_limits.so
session required pam_limits.so
2.3.8添加用户和用户组信息
[root@localhost ~]# groupdel dinstall
[root@localhost ~]# groupadd dinstall
[root@localhost ~]# useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
[root@localhost ~]# echo dmdba | passwd --stdin dmdba
Changing password for user dmdba.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# id dmdba
uid=1001(dmdba) gid=1001(dinstall) 组=1001(dinstall)
2.3.9新增.bash_profile
export TMP=/tmp
export DM_INSTALL_TMPDIR=$TMP
2.3.10创建目录结构
[root@localhost ~]# mkdir /opt/{dmdbms,dmbak} -p
[root@localhost ~]# mkdir /data/dmdbms/arch -p
[root@localhost ~]# chown -R dmdba.dinstall /opt/dmdbms /opt/dmbak/ /data/dmdbms
[root@localhost ~]# chmod 775 /opt/dmdbms /opt/dmbak/ /data/dmdbms
2.3.11安装程序组件
yum -y install dstat
yum -y install expect
yum -y install perf
yum -y install kernel-devel
yum -y install kernel
yum -y install kernel-headers
yum -y install gdbm
yum -y install gdb
yum -y install cmake
yum -y install gdbm-devel
yum -y install binutils
yum -y install compat-libstdc++-33
yum -y install elfutils-libelf
yum -y install elfutils-libelf-devel
yum -y install gcc
yum -y install gcc-c++
yum -y install glibc
yum -y install glibc-common
yum -y install glibc-devel
yum -y install glibc-headers
yum -y install libaio
yum -y install libaio-devel
yum -y install libgcc-4.1.2
yum -y install libstdc++
yum -y install libstdc++-devel
yum -y install make
yum -y install unzip
yum -y install zip
yum -y install numactl-devel
yum -y install sysstat
yum -y install unixODBC
yum -y install unixODBC-devel
yum -y install vnc
yum -y install xterm
yum -y install ksh
yum -y install pdksh
2.3.12上传数据安装包到/tmp/dmsoft
[root@localhost ~]# mkdir -p /tmp/dmsoft
[root@localhost ~]# chown -R dmdba.dinstall /tmp/dmsoft/DMInstall.bin
2.4安装数据库
[dmdba@yzjdwm dmsoft]$ ./DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
解压安装程序.........
欢迎使用达梦数据库安装程序
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
设置时区:
[ 1]: GTM-12=日界线西
[ 2]: GTM-11=萨摩亚群岛
[ 3]: GTM-10=夏威夷
[ 4]: GTM-09=阿拉斯加
[ 5]: GTM-08=太平洋时间(美国和加拿大)
[ 6]: GTM-07=亚利桑那
[ 7]: GTM-06=中部时间(美国和加拿大)
[ 8]: GTM-05=东部部时间(美国和加拿大)
[ 9]: GTM-04=大西洋时间(美国和加拿大)
[10]: GTM-03=巴西利亚
[11]: GTM-02=中大西洋
[12]: GTM-01=亚速尔群岛
[13]: GTM=格林威治标准时间
[14]: GTM+01=萨拉热窝
[15]: GTM+02=开罗
[16]: GTM+03=莫斯科
[17]: GTM+04=阿布扎比
[18]: GTM+05=伊斯兰堡
[19]: GTM+06=达卡
[20]: GTM+07=曼谷,河内
[21]: GTM+08=中国标准时间
[22]: GTM+09=汉城
[23]: GTM+10=关岛
[24]: GTM+11=所罗门群岛
[25]: GTM+12=斐济
[26]: GTM+13=努库阿勒法
[27]: GTM+14=基里巴斯
请选择设置时区 [21]:
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:
所需空间: 1071M
请选择安装目录 [/home/dmdba/dmdbms]:/opt/dmdbms
可用空间: 29G
是否确认安装路径(/opt/dmdbms)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /opt/dmdbms
所需空间: 1071M
可用空间: 29G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
2020-10-02 21:13:40
[INFO] 安装达梦数据库...
2020-10-02 21:13:41
[INFO] 安装 基础 模块...
2020-10-02 21:13:44
[INFO] 安装 服务器 模块...
2020-10-02 21:13:44
[INFO] 安装 客户端 模块...
2020-10-02 21:13:46
[INFO] 安装 驱动 模块...
2020-10-02 21:13:46
[INFO] 安装 手册 模块...
2020-10-02 21:13:47
[INFO] 安装 服务 模块...
2020-10-02 21:13:47
[INFO] 移动ant日志文件。
2020-10-02 21:13:48
[INFO] 安装达梦数据库完成。
请以root系统用户执行命令:
/opt/dmdbms/script/root/root_installer.sh
安装结束
[dmdba@yzjdwm dmsoft]$ exit
注销
[root@yzjdwm dmdba]# /opt/dmdbms/script/root/root_installer.sh
移动 /opt/dmdbms/bin/dm_svc.conf 到/etc目录
修改服务器权限
创建DmAPService服务
Created symlink /etc/systemd/system/multi-user.target.wants/DmAPService.service → /usr/lib/systemd/system/DmAPService.service.
创建服务(DmAPService)完成
启动DmAPService服务
2.5修改.bash_profile环境变量
export PATH="DM_HOME/bin:$DM_HOME/tool:$PATH"
2.6dmdba环境变量如下所示
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export TMP=/tmp
export DM_INSTALL_TMPDIR=$TMP
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/dmdbms/bin"
export DM_HOME="/opt/dmdbms"
export PATH="$DM_HOME/bin:$DM_HOME/tool:$PATH"
3.初始化数据库
3.1初始化实例,分别在主库和备库初始化实例
[dmdba@yzjdwp ~]$ dminit PATH=/data/dmdbms INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=16 LOG_SIZE=1024 SYSDBA_PWD=SYSDBA123 MAL_FLAG=0 ARCH_FLAG=1
[dmdba@yzjdws ~]$ dminit PATH=/data/dmdbms INSTANCE_NAME=GRP1_RT_02 PAGE_SIZE=16 LOG_SIZE=1024 SYSDBA_PWD=SYSDBA123 MAL_FLAG=0 ARCH_FLAG=1
3.2注册服务
#root用户注册服务(GRP1_RT_01)
[root@yzjdwp ~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /data/dmdbms/DAMENG/dm.ini -p GRP1_RT_01
#root用户注册服务(GRP1_RT_02)
[root@yzjdws ~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /data/dmdbms/DAMENG/dm.ini -p GRP1_RT_02
4.脱机备份主库,备库还原
1. 正常关闭主库
[root@yzjdwp ~]# su - dmdba
[dmdba@yzjdwp ~]$ DmServiceGRP1_RT_01 start
[dmdba@yzjdwp ~]$ DmServiceGRP1_RT_01 stop
2. 进行脱机备份
[dmdba@yzjdwp ~]$ dmrman CTLSTMT="BACKUP DATABASE '/data/dmdbms/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/opt/dmbak/BACKUP_FILE_01'"
3. 拷贝备份文件到备库所在机器
[dmdba@yzjdwp ~]$ scp -r /opt/dmbak/BACKUP_FILE_01 dmdba@192.168.6.171:/opt/dmbak
4. 执行脱机数据库还原与恢复
[dmdba@yzjdws ~]$ dmrman CTLSTMT="RESTORE DATABASE '/data/dmdbms/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmbak/BACKUP_FILE_01'"
[dmdba@yzjdws ~]$ dmrman CTLSTMT="RECOVER DATABASE '/data/dmdbms/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmbak/BACKUP_FILE_01'"
[dmdba@yzjdws ~]$ dmrman CTLSTMT="RECOVER DATABASE '/data/dmdbms/DAMENG/dm.ini' UPDATE DB_MAGIC"
5.配置主库GRP1_RT_01
5.1配置dm.ini,主要修改ALTER_MODE_STATUS,ENABLE_OFFLINE_TS,MAL_INI ,ARCH_INI
#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RT_01
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
5.2配置dmmal.ini(主库和备库一致)
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 172.16.6.170 #MAL 系统监听TCP连接的IP地址
MAL_PORT = 5436 #MAL #系统监听TCP连接的端口
MAL_INST_HOST = 192.168.6.170 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5536 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5336
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 172.16.6.171
MAL_PORT = 5436
MAL_INST_HOST = 192.168.6.171
MAL_INST_PORT = 5236
MAL_DW_PORT = 5536
MAL_INST_DW_PORT = 5336
5.3配置主库dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #即时归档类型
ARCH_DEST = GRP1_RT_02 #即时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/dmdbms/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 512 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 40960 #单位Mb,0表示无限制,范围1024~4294967294M
5.4配置主库dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库检测备库故障恢复的时间间隔
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453332 #守护系统唯一OGUID值
INST_INI = /data/dmdbms/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #实例自动重启
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
5.5主库启动到mount状态
[dmdba@yzjdwp ~]$ dmserver /data/dmdbms/DAMENG/dm.ini mount
5.6主库配置OGUID和修改数据库模式
[root@yzjdwp ~]# su - dmdba
[dmdba@yzjdwp ~]$ disql SYSDBA/SYSDBA123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 3.514(ms)
disql V8
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 8.164(毫秒). 执行号:0.
SQL> sp_set_oguid(453332);
DMSQL 过程已成功完成
已用时间: 5.304(毫秒). 执行号:1.
SQL> alter database primary;
操作已执行
已用时间: 1.698(毫秒). 执行号:0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 5.478(毫秒). 执行号:2.
6.将数据文件传输到备库,使用dmdba用户传输文件
[dmdba@yzjdwp DAMENG]$ scp dm.ini dmarch.ini dmmal.ini dmwatcher.ini dmdba@192.168.6.171:/data/dmdbms/DAMENG
7.配置备库GRP1_RT_02
7.1配置dm.ini
#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
7.2配置备库dmmal.ini(主备库一致)
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 172.16.6.170 #MAL 系统监听TCP连接的IP地址
MAL_PORT = 5436 #MAL #系统监听TCP连接的端口
MAL_INST_HOST = 192.168.6.170 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5536 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5336
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 172.16.6.171
MAL_PORT = 5436
MAL_INST_HOST = 192.168.6.171
MAL_INST_PORT = 5236
MAL_DW_PORT = 5536
MAL_INST_DW_PORT = 5336
7.3配置备库dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #即时归档类型
ARCH_DEST = GRP1_RT_01 #即时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/dmdbms/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 512 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 40960 #单位Mb,0表示无限制,范围1024~4294967294M
7.4配置备库dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库检测备库故障恢复的时间间隔
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453332 #守护系统唯一OGUID值
INST_INI = /data/dmdbms/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #实例自动重启
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
7.5启动数据库到mount状态
[dmdba@yzjdws ~]$ dmserver /data/dmdbms/DAMENG/dm.ini mount
7.6修改数据库oguid和数据库模式
[dmdba@yzjdws ~]$ disql SYSDBA/SYSDBA123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 3.401(ms)
disql V8
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 7.396(毫秒). 执行号:0.
SQL> sp_set_oguid(453332);
DMSQL 过程已成功完成
已用时间: 10.926(毫秒). 执行号:1.
SQL> alter database standby;
操作已执行
已用时间: 1.816(毫秒). 执行号:0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 2.641(毫秒). 执行号:2.
SQL>
8.注册并启动守护进程
#root用户注册服务(GRP1_RT_01)
/opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /data/dmdbms/DAMENG/dmwatcher.ini -p rt1
#root用户注册服务(GRP1_RT_02)
/opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /data/dmdbms/DAMENG/dmwatcher.ini -p rt2
9.执行并优化脚本
略
10配置监视器
1.配置dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /data/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453332 #组 GRP1 的唯一OGUID 值
MON_DW_IP = 172.16.6.170:5536
MON_DW_IP = 172.16.6.171:5536
2.注册监视器服务
#root用户注册服务
/opt/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini /data/dmdbms/dmmonitor.ini -p m1
#后台启动监视器
systemctl start DmMonitorServicem1
11主备同步测试及主备切换
11.1主备同步
-----主库创建表test1
SQL> create table test1 as select * from sysobjects;
-----备库查询
SQL> select count(*) from test1;
11.2主备切换
dmmonitor /data/dmdbms/dmmonitor.ini
show
login
switchover GRP1.GRP1_RT_01
switchover GRP1.GRP1_RT_02
12定时备份策略
全备 | 增备 | 定时删除过期备份 |
每周六00:00 | 每周日,周一至周五00:00增备 | 每周五删除60天前的备份 |