达梦数据库读写分离

  • Post author:
  • Post category:其他


安装实例:./dminit path=/opt/dmdbms/data db_name=test case_sensitive=0 charset=0 page_size=32

起服务,登录数据库,检查状态是否是open

进入/dm/bin

./dmserver /data_permit/permit/dm.ini

./disql SYSDBA/SYSDBA@localhost:32141

select name,instance_name,start_time,status$ from v$instance;

主库,备库 配置dm.ini

ARCH_INI = 1 打开归档配置

主库,备库 配置 dmarch.ini

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dmdba/data/arch #本地归档文件存放路径

ARCH_FILE_SIZE = 128 #单位 Mb ,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 0 #单位 Mb 0 表示无限制,范围 1024~4294967294M

正常关闭数据库

systemctl stop DmServicehkjgxt.service

###进行脱机备份

#su dmdba

$cd /dmdba/bin

$./dmrman CTLSTMT=“BACKUP DATABASE ‘/data_admin/admin/dm.ini’ FULL TO BACKUP_FILE1 BACKUPSET ‘/data_admin/BACKUP_FILE_02’”

###拷贝备份文件到备库所在机器

scp /data_case/BACKUP_FILE_01 172.24.29.186:/data_case/

scp -r /data_admin/BACKUP_FILE_02 172.24.29.186:/data_admin/

###备库执行脱机数据库还原与恢复

#su dmdba

$cd /dmdba/bin

$./dmrman CTLSTMT=“RESTORE DATABASE ‘/data_admin/admin/dm.ini’ FROM BACKUPSET ‘/data_admin/BACKUP_FILE_02’”

$./dmrman CTLSTMT=“RECOVER DATABASE ‘/data_admin/admin/dm.ini’ FROM BACKUPSET ‘/data_admin/BACKUP_FILE_02’”

$./dmrman CTLSTMT=“RECOVER DATABASE ‘/data_admin/admin/dm.ini’ UPDATE DB_MAGIC”

主库 配置dm.ini

#su dmdba

$cd /dmdba/data/hkjgxt/

$ vim dm.ini

PORT_NUM= 32141 #数据库实例监听端口

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次的日志发送信息

主库配置dmmal.ini(这个文件数据库中并没有附带,可以直接在dm.ini的目录下通过vi编辑器创建)

$vim dmmal.ini

MAL_CHECK_INTERVAL kjgxt #实例名,和dm.ini中的INSTANCE_NAME一致

MAL_HOST = 172.25.9.92 #MAL系统监听TCP连接的IP地址

MAL_PORT = 61141 #MAL系统监听TCP连接的端口

MAL_INST_HOST = 172.25.9.92 #实例的对外服务IP地址

MAL_INST_PORT = 32141 #实例的对外服务端口,和dm.ini中的PORT_NUM一致

MAL_DW_PORT = 52141 #实例本地的守护进程监听TCP连接的端口

MAL_INST_DW_PORT = 33141 #实例监听守护进程TCP连接的端口

[MAL_INST2]

MAL_INST_NAME = hkjgxt_r01

MAL_HOST = 172.25.9.93

MAL_PORT = 61142

MAL_INST_HOST = 172.25.9.93

MAL_INST_PORT = 32142

MAL_DW_PORT = 52142

MAL_INST_DW_PORT = 33142

配置dmarch.ini

$vim dmarch.ini(这个文件数据库中并没有附带,可以直接在dm.ini的目录下通过vi编辑器创建)

[ARCHIVE_REALTIME]

ARCH_TYPE= TIMELY #即时归档类型

ARCH_DEST= hkjgxt_r01 #即时归档目标实例名

qrypermit

[ARCHIVE_LOCAL1]

ARCH_TYPE= LOCAL #本地归档类型

ARCH_DEST= /dmdba/data/arch #本地归档文件存放路径

ARCH_FILE_SIZE= 128 #单位Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT= 0 #单位Mb,0表示无限制,范围1024~4294967294M

配置 dmwatcher.ini

$vim dmwatcher.ini(这个文件数据库中并没有附带,可以直接在dm.ini的目录下通过vi编辑器创建)

[GRP1] #组名,可以任意取名,但是三份需要一样(主库的dmwatcher,备库的dmwatcher和备库的dmmonitor三份)

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = AUTO #自动切换模式

DW_ERROR_TIME = 10 #远程守护进程故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10 #本地实例故障认定时间

INST_OGUID = 453332 #守护系统唯一OGUID值

INST_INI = /dmdba/data/hkjgxt/dm.ini #dm.ini配置文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD =/dmdba/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

mount 主库

./dmdba/bin/dmserver /dmdba/data/hkjgxt/dm.ini mount

./disql SYSDBA/SYSDBA@localhost:32141

(此次安装选择的是DM8,由于前期在配置文件中改了端口所以在下方选择时需要输入更新之后的端口,才可以登录)

确定数据库状态

sql>

select name,instance_name,start_time,status$ from v$instance;

如果是最后一栏是mount状态继续

启动命令行工具DIsql ,登录主库设置 OGUID 值。(OGUID值可以任意取,但是主库,从库与监视器上的OGUID需要相同)

SQL>

SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);

sp_set_oguid(453331);

SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);

模式改为主库

SQL>

alter database primary;

配置备库

#su dmdba

$cd /dmdba/data/hkjgxt_r01/

vi dm.ini

INSTANCE_NAME= hkjgxt_r01

PORT_NUM= 32142 #数据库实例监听端口

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次的日志重演信息

scp 172.25.9.92:/dmdba/data/hkjgxt/dmmal.ini /dmdba/data/hkjgxt_r01

查看权限是不是dmdba

ll

chown dmdba:dinstall dmmal.ini

配置 dmarch.ini

vim dmarch.ini(这个文件数据库中并没有附带,可以直接在dm.ini的目录下通过vi编辑器创建)

[ARCHIVE_REALTIME]

ARCH_TYPE= TIMELY #即时归档类型

ARCH_DEST= hkjgxt #即时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE= LOCAL #本地归档类型

ARCH_DEST= /dmdba/data/arch #本地归档文件存放路径

ARCH_FILE_SIZE= 128 #单位Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT= 0 #单位Mb,0表示无限制,范围1024~4294967294M

配置dmwatcher.ini

vim dmwatcher.ini(这个文件数据库中并没有附带,可以直接在dm.ini的目录下通过vi编辑器创建)

[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 = /dmdba/data/hkjgxt_r01/dm.ini #dm.ini配置文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /dmdba/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

mount备库

./dmdba/bin/dmserver /dmdba/data/hkjgxt_r01/dm.ini mount

(此次安装选择的是DM8,由于前期在配置文件中改了端口所以在下方选择时需要输入更新之后的端口,才可以登录)

./disql SYSDBA/SYSDBA@localhost:32141

sql>

select name,instance_name,start_time,status$ from v$instance;

如果是最后一栏是mount状态继续

设置OGUID(OGUID值可以任意取,但是主库,从库与监视器上的OGUID需要相同)

SQL>

SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);

sp_set_oguid(453331);

SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);

修改数据库模式

SQL>

SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);

alter database standby;

SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);

在备库配置监视器

修改dmmonitor.ini

MON_DW_Confirm = 1 #确认监视器模式

MON_LOG_PATH = /dmdba/data/log#监视器日志文件存放路径

MON_LOG_INTERVAL= 60#每隔60s定时记录系统信息到日志文件

MON_LOG_FILE_SIZE = 32#每个日志文件最大32M

MON_LOG_SPACE_LIMIT = 0#不限定日志文件总占用空间

[GRP1] #组名,可以任意取名,但是三份需要一样

MON_INST_OGUID = 453332 #组GRP1的唯一OGUID值

#以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置

#IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT

MON_DW_IP = 172.25.9.92:61141

MON_DW_IP = 172.25.9.93:61142

MON_DW_Confirm = 1

MON_LOG_PATH = /data_case/log

MON_LOG_INTERVAL= 60

MON_LOG_FILE_SIZE = 32

MON_LOG_SPACE_LIMIT = 0

[GRP1]

MON_INST_OGUID = 453332

MON_DW_IP = 172.24.29.131:61151

MON_DW_IP = 172.24.29.186:6115

启动各主备库守护进程

主库:

#su dmdba

$cd /dmdba/bin

$./dmwatcher /dmdba/data/hkjgxt/dmwatcher.ini

备库

#su dmdba

$cd /dmdba/bin

$./dmwatcher /dmdba/data/hkjgxt_r01/dmwatcher.ini

守护进程开启后,主备库数据库状态会自动由mount转为open

查看主备库状态

./disql SYSDBA/SYSDBA:32141

select status from v$instance;

./disql SYSDBA/SYSDBA:32142

select status from v$instance;

结果应该是open

备库启动监视器

cd /dmdba/bin/

./dmmonitor /dmdba/data/hkjgxt_r0l/dmmonitor.ini

show

测试

主库create table test (name varchar(10), ID int);

insert into test values(‘a’ , 01);

备库

select * from test;

停掉所有进程

先停monitor,备库watcher,主库watcher,备库dmserver,主库dmserver。

删除数据库当前代码server服务

查询systemctl status Dm…

进入/dm/script/root

./dm_service_uninstaller.sh -n DmService…

创建数据库服务

主库

./dm_service_installer.sh -t dmserver -p hkjgxt -dm_ini /dmdba/data/hkjgxt/dm.ini -m mount

备库

./dm_service_installer.sh -t dmserver -p hkjgxt -dm_ini /dmdba/data/hkjgxt_r01/dm.ini -m mount

把watcher,monitor也写进服务

cd /dm/script/root

./dm_service_installer.sh -t dmserver -p permitqry -dm_ini /data_permit/permit/dm.ini -m mount

./dm_service_installer.sh -t dmwatcher -p permitqry -watcher_ini /data_permit/permit/dmwatcher.ini

./dm_service_installer.sh -t dmmonitor -p permitqry -monitor_ini /data_permit/permit/dmmonitor.ini

主库启动数据库服务

备库启动数据库服务

主库启动监听服务

备库启动监听服务

先./dmmonitor 跑一下,没问题用systemctl start dmmonitor进行启动监视器



版权声明:本文为zhanglinna1136原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。