服务器类型 | IP地址 | 操作系统 | 数据库实例名称 |
---|---|---|---|
主机 | 172.18.21.144 | centos7 | DMSERVER |
备机 | 172.18.21.147 | centos7 | DMSERVER2 |
参数 | 主库 | 备库 |
---|---|---|
实例名称 | DMSERVER | DMSERVER 2 |
IP | 172.18.21.144 | 172.18.21.147 |
OGUID | 45331 | 45331 |
守护组 | GRP1 | GRP1 |
归档上限 | 51200 | 51200 |
安装目录 | /opt/dmdbms/bin/ | /opt/dmdbms/bin/ |
实例目录 | /dmdata/DAMENG | /dmdata/DAMENG |
cat /etc/centos-release
/opt/dmdbms/bin/ #达梦8的BIN路径
/dmdata/DAMENG #达梦8的DATA路径
cd /opt/dmdbms/bin/ #达梦8的BIN路径
./disql #执行查询 输入登录信息:默认SYSDBA:SYSDBA
select * from v$version; #查询达梦8版本的SQL
参考笔者的达梦8的安装部署文章,写的步骤很详细!
https://blog.csdn.net/nasen512/article/details/126872483
部署过程中需要通过日志定位问题解决问题
cd /opt/dmdbms/log
tail -200f dm_DMSERVER_202310.log
systemctl status firewalld.service #查看防火墙状态
systemctl stop firewalld.service #临时关闭防火墙
systemctl disable firewalld.service #开机不自启防火墙
关闭SELinux,查看是否开启了SELinux,如果显示为Enforcing,需要改为Disabled,再重启系统使配置生效。
getenforce
vi /etc/selinux/config
进入文件后修改 SELINUX = disabled
保存退出文件
reboot
(1)初始化主库
service DmServiceDMSERVER stop #关闭实例
cd /dmdata/DAMENG
rm -rf * #将原有的DATA文件删干净/dmdata/DAMENG下的,因为要重新初始化!
有些操作必须要切换到达梦DBA用户,如果用root操作会各种操作系统的执行文件权限报错,导致数据库起不来,这个点很重要。如果你操作过程中忘了切换用户,那需要全部重来很麻烦!!
su dmdba #切换到达梦DBA用户,如果用root操作会各种操作系统的执行文件权限报错,导致数据库起不来,这个点很重要。
cd /opt/dmdbms/bin/
./dminit PATH=/dmdata UNICODE_FLAG=1 LENGTH_IN_CHAR=1 CASE_SENSITIVE=0 EXTENT_SIZE=64 PAGE_SIZE=32 INSTANCE_NAME=DMSERVER
如上图重新初始化完成,主库的实例名称是DMSERVER,此处注意主库与从库的实例名称不能完全一样,否则在后面的操作过程中会报错!
(2)启动新初始化的数据库服务
cd /dmdata/DAMENG #进入到达梦的文件路径
ls -l #查看文件的归属
数据文件归属是dmdba用户,如果是root,就说明操作错误了,后面会遇到各种权限问题!!!!
启动服务用root用户,数据操作用dmdba用户,注意!!
su root #启动服务用root用户,数据操作用dmdba用户,注意!!
service DmServiceDMSERVER start #启动达梦8服务
su dmdba
cd /opt/dmdbms/bin/
./disql #输入SYSDBA:SYSDBA
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
ALTER DATABASE OPEN;
BACKUP DATABASE BACKUPSET '/dmdata/DAMENG/bak/BACKUP_FILE';
SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SP_SET_PARA_VALUE (2,'MAL_INI',1);
SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
(6)关闭主库的实例服务(144服务器上执行)
关闭服务用root用户
su root
service DmServiceDMSERVER stop
(7)配置4个配置文件
进到/dmdata/DAMENG/文件目录,分别创建4个配置文件!下面是4个配置文件的文件!
(1)dmarch.ini
cd /dmdata/DAMENG/
vi dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/DAMENG/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DMSERVER2 #实时归档目标
(2)dmmal.ini
如果要调整防火墙策略,参考这里面的需要开放的端口
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DMSERVER
MAL_HOST = 172.18.21.144
MAL_PORT = 5238
MAL_INST_HOST = 172.18.21.144
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5237
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 172.18.21.147
MAL_PORT = 5238
MAL_INST_HOST = 172.18.21.147
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5237
(3)dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
(4)dmmonitor.ini
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 172.18.21.144:5239 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 172.18.21.147:5239
检查配置文件
cd /dmdata/DAMENG/
ls -l
chown dmdba:dinstall dmmonitor.ini
(8)注册服务(144服务器执行)
注册服务需要切换到root
su root
cd /opt/dmdbms/script/root
如果发现服务已经创建则需要把服务注销,再创建服务!
sh dm_service_uninstaller.sh -n DmWatcherServiceWatcher #删除服务命令
sh dm_service_uninstaller.sh -n DmMonitorServiceMonitor
注册dmwatcher服务
sh dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/DAMENG/dmwatcher.ini
注册监视器服务
sh dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dmdata/DAMENG/dmmonitor.ini
(1)初始化实例(注意实例名称要跟主库区分开)
先关闭实例服务要不然操作不了
su root
service DmServiceDMSERVER stop #关闭服务
cd /dmdata/DAMENG
rm -rf * #清空之前的数据库数据文件,因为下面要重新初始化
su dmdba
cd /opt/dmdbms/bin/
./dminit PATH=/dmdata UNICODE_FLAG=1 LENGTH_IN_CHAR=1 CASE_SENSITIVE=0 EXTENT_SIZE=64 PAGE_SIZE=32 INSTANCE_NAME=DMSERVER2
此处初始化实例名称DMSERVER2是跟主库服务器区分开的!
(2)147备库还原主库144的备份
将刚刚144主库备份的数据要恢复到147让2个服务器的数据完全一致!!
su dmdba #切换到dmdba
scp -r [email protected]:/dmdata/DAMENG/bak /dmdata/DAMENG/ #将144的备份文件同步到147
注意这备份文件必须归属是dmdba,如果是其他用户后面执行恢复操作会报错!!
(3)147服务器执行恢复操作
不能用root执行,必须用dmdba,如果用root会导致数据库文件归属问题,后面实例无法启动
su dmdba #不能用root执行,如果用root会导致数据库文件归属问题,后面实例无法启动
cd /opt/dmdbms/bin
还原整个数据库命令
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/DAMENG/bak/BACKUP_FILE'"
(4)处理DB_MAGIC报错实例无法启动问题
此时启动147实例会报错,错误说DB_MAGIC问题,所以我们需要处理这个问题!笔者查了资料,找到了解决方法
su dmdba
scp -r [email protected]:/dmdata/DAMENG/arch /dmdata/DAMENG/
cd /opt/dmdbms/bin/
./dmrman
recover database '/dmdata/DAMENG/dm.ini' with archivedir '/dmdata/DAMENG/arch';
RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC;
(5)启动147实例
su root
service DmServiceDMSERVER start
su dmdba
cd /opt/dmdbms/bin/
./disql #输入SYSDBA:SYSDBA
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
ALTER DATABASE OPEN ;
SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SP_SET_PARA_VALUE (2,'MAL_INI',1);
SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
su root
service DmServiceDMSERVER stop
(8)147服务器配置4个配置文件
进到/dmdata/DAMENG/文件目录,分别创建4个配置文件!下面是4个配置文件的文件!
su dmdba
cd dmdata/DAMENG/
vi dmmal.ini #依次4个配置文件
(1)dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/DAMENG/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DMSERVER #实时归档目标
(2)dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DMSERVER
MAL_HOST = 172.18.21.144
MAL_PORT = 5238
MAL_INST_HOST = 172.18.21.144
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5237
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 172.18.21.147
MAL_PORT = 5238
MAL_INST_HOST = 172.18.21.147
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5237
(3)dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
(4)dmmonitor.ini
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 172.18.21.144:5239 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 172.18.21.147:5239
查看4个文件归属dmdba
cd /dmdata/DAMENG/
ls -l
su root
cd /opt/dmdbms/script/root
注册dmwatcher服务
sh dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/DAMENG/dmwatcher.ini
注册监视器服务
sh dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dmdata/DAMENG/dmmonitor.ini
su root
service DmServiceDMSERVER start
su dmdba
cd /opt/dmdbms/bin
./disql #输入SYSYDBA SYSDBA
ALTER DATABASE MOUNT;
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
ALTER DATABASE OPEN ;
select status$ from v$instance;
su root
service DmServiceDMSERVER start
su dmdba
cd /opt/dmdbms/bin
./disql #输入SYSYDBA SYSDBA
ALTER DATABASE MOUNT;
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
ALTER DATABASE OPEN ;
select status$ from v$instance;
su root
service DmServiceDMSERVER start
service DmWatcherServiceWatcher start
service DmMonitorServiceMonitor start
su root
service DmServiceDMSERVER start
service DmWatcherServiceWatcher start
service DmMonitorServiceMonitor start
su dmdba
cd /opt/dmdbms/bin
./dmmonitor /dmdata/DAMENG/dmmonitor.ini
show
在监视器里面执行show命令,可以查看到主库和备库的FLSN不一样,需要重新备份主库文件,在备库上还原。
service DmWatcherServiceWatcher stop
service DmMonitorServiceMonitor stop
service DmServiceDMSERVER stop
重新执行主库备份,然后去从库还原操作
2个服务器先把之前的备份清空
cd /dmdata/DAMENG/bak/BACKUP_FILE
rm -rf *
144执行主库备份
su dmdba
cd /opt/dmdbms/bin
./dissql #输入SYSDBA SYSDBA
BACKUP DATABASE BACKUPSET '/dmdata/DAMENG/bak/BACKUP_FILE';
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
alter database open force;
BACKUP DATABASE BACKUPSET '/dmdata/DAMENG/bak/BACKUP_FILE';
147执行备份还原
su dmdba
scp -r [email protected]:/dmdata/DAMENG/bak /dmdata/DAMENG/
su root
service DmServiceDMSERVER start
su dmdba
cd /opt/dmdbms/bin
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/DAMENG/bak/BACKUP_FILE'"
cd /dmdata/DAMENG/arch
rm -rf *
scp -r [email protected]:/dmdata/DAMENG/arch /dmdata/DAMENG/
cd /opt/dmdbms/bin
./dmrman
recover database '/dmdata/DAMENG/dm.ini' with archivedir '/dmdata/DAMENG/arch';
RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC;
2个服务器再启动服务
service DmServiceDMSERVER restart
service DmWatcherServiceWatcher restart
service DmMonitorServiceMonitor restart
去144服务器
su dmdba
cd /opt/dmdbms/bin
./dmmonitor /dmdata/DAMENG/dmmonitor.ini
show
(1)144主库插入数据
CREATE TABLE TABLE_1(id int);
INSERT INTO TABLE_1 VALUES(1);
COMMIT;
(2)147从库查看数据
desc TABLE_1;
SELECT * FROM TABLE_1;
最终测试主库备库切换
su dmdba
cd /opt/dmdbms/bin
./dmmonitor /dmdata/DAMENG/dmmonitor.ini
login
Switchover
执行切换命令
继续
show 命令
switchover [group_name[.]] [db_name]
将指定组中的指定备库切换为新的主库,将当前的主库切换为新的备库,此命令要求执
行切换的主备库都是正常 Open 状态。执行此命令需要先登录监视器。
只有一组的情况下,可以不指定 group_name,组中只有一个备库的情况下,可以不
指定 db_name,如果 group_name 和 db_name 同时指定,则需要用―.‖符合分隔。
启动和退出流程
退出过程:退出监视器——关闭备机的守护进程——关闭主机的守护进程——关闭主机实例——关闭备机实例
启动过程:开主机实例——开主机守护进程——开备机实例——开备机守护进程——打开确认监视器
1、将上述文章里面的配置文件里面的端口梳理,要依次打开,保证主备2个服务器的通讯正常!
2、如果生产上需要部署主备集群,则需要先把生产的数据库进行备份,然后部署完空的主备集群,然后再把数据恢复到主库。数据库备份导出导入的方法参考笔者另篇文章!
https://blog.csdn.net/nasen512/article/details/127404681 #达梦数据库导入导出方法
提前要把达梦的数据库用户建好,恢复数据库之前要注意。笔者也测试过,主库新增用户,从库也会自动创建,是根据数据库实例为单位进行数据同步的,主库恢复数据,从库也会跟上同步,已经验证过!
总结主备配置难点:
1、主从数据库的状态为mount,不能正常!需要人工调整状态!
2、主库数据备份,恢复到从库过程中遇到错误!
3、数据主从恢复数据成功,但是FLSN不一致!
如果你需要部署windows版本请参考笔者另篇文章:
https://blog.csdn.net/nasen512/article/details/133760667