达梦数据库探索

olei 3,500 views 1

前言

  • 创建实例的时候,数据库名字就是/opt/dmdbs/data目录下数据目录的名字

    /opt/dmdbms/data/DAMENG
  • 创建实例的时候,实例的名字就是systemdservice的名字(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

后记

本文章由我海哥提供!

发表评论 取消回复
表情 图片 链接 代码

  1. rantrism
    rantrism Lv 1

    您好~我是腾讯云+社区的运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
    作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物。

分享