• 搭建达梦8国产数据库一主一从双机热备案例达梦DMHS插件实战


    搭建达梦8国产数据库一主一从双击热备案例达梦DMHS插件实战

    一、测试环境介绍

    测试服务器操作系统:centos7
    在这里插入图片描述
    在这里插入图片描述

    select *,id_code from v$version;  #查询达梦8当前版本
    
    • 1
    服务器IP角色
    172.18.21.144达梦8主数据库
    172.18.21.145达梦8备份数据库

    提前把防火墙关闭避免端口引起问题

    systemctl status firewalld.service  #查看防火墙状态
    systemctl stop firewalld.service  #临时关闭防火墙
    systemctl disable firewalld.service  #开机不自启防火墙
    
    • 1
    • 2
    • 3

    关闭SELinux,查看是否开启了SELinux,如果显示为Enforcing,需要改为Disabled,再重启系统使配置生效。

    getenforce
    vi /etc/selinux/config
    进入文件后修改 SELINUX = disabled
    保存退出文件
    reboot
    
    • 1
    • 2
    • 3
    • 4
    • 5

    二、达梦DMHS插件的安装部署(2个数据库服务器上都要安装)

    这个插件需要联系官方的销售领取
    在这里插入图片描述
    在这里插入图片描述
    安装包送上服务器

    执行安装

    chmod +x dmhs_V4.1.48_pack4_dm8_rev104804_rh6_64_veri_20211228.bin
      
    ./dmhs_V4.1.48_pack4_dm8_rev104804_rh6_64_veri_20211228.bin -i
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    安装路径默认回车
    在这里插入图片描述
    在这里插入图片描述
    回车
    在这里插入图片描述
    回车
    在这里插入图片描述
    回车

    在这里插入图片描述

    在这里插入图片描述
    内网地址都写成一样

    在这里插入图片描述
    回车
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    默认回车

    在这里插入图片描述
    在这里插入图片描述
    2
    在这里插入图片描述

    在这里插入图片描述

    按ctrl+c #退出安装
    
    • 1
    tail -1000f /opt/dmhs/log/install.log  #查看一下安装日志是否正常
    
    • 1

    在这里插入图片描述

    三、安装ODBC插件

    (1)在线安装

    yum -y install unixODBC  #在线更新安装ODBC插件,如果是内网环境,去网上查查怎么离线安装!
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    (2)修改odbc 配置*

    ps -ef|grep dm #查看一下当前达梦8的BIN路径
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    vim /etc/odbcinst.ini
    
    • 1
    [DM8 ODBC DRIVER]
    Description = ODBC DRIVER FOR DM8
    Driver = /opt/dmdbms/bin/libdodbc.so
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    (3)修改odbc 配置

    vim /etc/odbc.ini
    
    • 1
    [DM8]
    Description = DM ODBC DSN
    Driver = DM8 ODBC DRIVER
    SERVER = localhost
    UID = SYSDBA
    PWD = SYSDBA
    TCP_PORT = 5236
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    四、执行一些脚本(2个数据库都要执行)

    (1)新建归档

    使用SYSDBA连接登录数据库执行以下语句开启归档日志。其中DEST为归档日志存放目录,需要提前创建好,FILE_SIZE为单个归档文件大小,SPACE_LIMIT为归档目录日志目录大小限制.

    cd /opt/dmdbms/bin/
    ./disql SYSDBA/SYSDBA:5236
    
    • 1
    • 2

    在这里插入图片描述

    ALTER DATABASE MOUNT;
    ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/dmarch/DMHS,TYPE=LOCAL,SPACE_LIMIT=0';
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;
    select para_value from v$dm_ini where para_name in ('ARCH_INI');
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    (2)开启逻辑日志

    使用SYSDBA用户连接登录数据库执行以下语句:

    SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);
    select para_value from v$dm_ini where para_name in ('RLOG_APPEND_LOGIC');
    
    • 1
    • 2

    在这里插入图片描述

    (3)配置DDL辅助表和触发器

    使用SYSDBA连接登录数据库执行DMHS安装目录下script子目录的“ddl_sql_dm8.sql”脚本。(可以使用disql连接,使用"start /xx/xx.sql"直接执行该脚本,但建议使用DM管理工具连接的数据库,直接复制SQL脚本内容到查询框执行)
    要执行一些初始化的脚本,这个脚本要用达梦的管理工具执行,要不然会报错!
    先找到文件

    cd  /opt/dmhs/scripts
    
    • 1

    在这里插入图片描述
    把这个文件拷下来用达梦的数据库工具执行

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    执行完成后,使用以下SQL语句查询辅助表是否创建成功

    select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
    
    • 1

    执行以下SQL语句查询触发器是否创建成功:

    select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';
    
    • 1

    在这里插入图片描述

    五、2个达梦数据库都成功安装完成DMHS插件之后配置配置源端和目的端

    (1)去目标从库数据库服务器145创建配置文件

    cd /opt/dmhs/bin
    
    • 1
    vim dmhs.hs
    
    • 1
    <?xml version="1.0" encoding="GB2312"?>
    <dmhs>
    
     <base>    <!-- 管理模块的基本配置 -->
        <lang>en</lang>    <!-- 语言选项,ch 为中文,en 为英文 -->
        <mgr_port>5345</mgr_port>    <!-- 管理端口号,默认为5345-->
        <ckpt_interval>60</ckpt_interval>    <!-- 检查点间隔,默认60 -->
        <siteid>2</siteid>    <!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
        <version>2.0</version>
    </base>
    
    <exec>    <!-- 执行模块的基本配置 -->
      <recv>
        <data_port>5346</data_port>    <!-- 当数据传递采用网络直连时,需要配置该参数,表明同步数据从该端口号获取。 -->
      </recv>
      <db_type>dm8</db_type>    <!-- 目标端数据库类型 -->
      <db_server>172.18.21.145</db_server>    <!-- 目标端数据库服务名或IP -->
      <db_user>SYSDBA</db_user>    <!-- 目标端数据库用户 -->
      <db_pwd>SYSDBA</db_pwd>    <!-- 用户的密码 -->
      <db_port>5236</db_port>    <!-- 目标端数据库端口 -->
      <db_name></db_name>    <!-- 默认数据库名,默认为空串(只针对dm6有用)-->
      <char_code>PG_GB18030</char_code>
      <exec_thr>4</exec_thr>    <!-- 执行线程个数,只有当 exec_mode 为 1 时才会生效!默认为1 -->
      <exec_sql>1024</exec_sql>    <!-- SQL 缓存大小,默认为 512M -->
      <exec_trx> 5000 </exec_trx>    <!-- 事务缓存个数,默认为 5000 -->
      <exec_rows>1000</exec_rows>    <!-- 批量绑定行数,默认为 250 -->
     </exec>
    </dmhs>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

    (2)启动目的端服务

    ./dmhs_server dmhs.hs
    start exec
    
    
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    在这里插入图片描述
    出现启动错误

    https://blog.csdn.net/weixin_45260302/article/details/126672849  #参考文章解决方法
    
    • 1
    ldd libdmhs_exec.so
    
    • 1

    在这里插入图片描述

    find / -name libdmoci.so
    
    • 1

    然后把not found的文件libdmoci.so复制到安装DMHS的bin目录下(若是find不到,可以从别处相对应DMHS版本中copy所需要的文件);

    cp /opt/dmhs/db/bin/libdmoci.so /opt/dmhs/bin/
    
    • 1

    在这里插入图片描述
    在执行试试

    ./dmhs_server dmhs.hs
    start exec
    
    
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    (3)去源数据库144创建配置文件

    cd /opt/dmhs/bin
    
    • 1
    vim dmhs.hs
    
    • 1
     <?xml version="1.0" encoding="GB2312"?>
    <dmhs>
    
     <base>
    <lang>en</lang>
     <mgr_port>5345</mgr_port>
     <ckpt_interval>60</ckpt_interval>
     <siteid>1</siteid>
    <version>2.0</version>
     </base>
    
     <cpt>
     <db_type>dm8</db_type>
     <db_server>172.18.21.144</db_server>
     <db_user>SYSDBA</db_user>
     <db_pwd>SYSDBA</db_pwd>
     <db_port>5236</db_port>
     <db_ssl_path></db_ssl_path>
     <db_ssl_pwd></db_ssl_pwd>
     <parse_thr>1</parse_thr>
     <ddl_mask>op:obj</ddl_mask> <!--DDL 配置项-->
     <arch><!--归档清理配置项-->
     <clear_interval>600</clear_interval>
     <clear_flag>0</clear_flag>
     </arch>
     <send><!-- 发送模块配置 -->
     <ip>172.18.21.145</ip>
     <mgr_port>5345</mgr_port>
     <data_port>5346</data_port>
     <trigger>1</trigger><!-- 是否忽略触发器,默认为 0,限定值 0,1 -->
     <constraint>1</constraint><!-- 是否忽略约束,默认为 0,限定值 0,1 -->
     <identity>1</identity>
     <net_turns>0</net_turns>
     <filter><!--过滤配置项-->
     <enable><!-- 白名单,所有允许同步的表 -->
    <item>SYSDBA.*</item>
     </enable>
     </filter>
    
     <map><!--映射配置项-->
     <item>SYSDBA.*==SYSDBA.*</item>
     </map>
    
     </send>
     </cpt>
    </dmhs>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    在这里插入图片描述
    源数据库创建一个表,插入一条数据
    在这里插入图片描述

    create table a(
    id int,
    name varchar(255)
    );
    
    insert into a values(1,'john');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (4)启动源端(bin目录下):

    ./dmhs_server dmhs.hs 
    clear exec lsn #为了初始化日志的起始位置。
    COPY 0SCH.NAME=’SYSDBA’ ” CREATE|INSERT|DICT #装载数据,配置同步掩码--一次就行
    start cpt
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    ldd libcpt_dm8.so
    
    • 1

    在这里插入图片描述

    find / -name libdmoci.so
    
    • 1

    然后把not found的文件libdmoci.so复制到安装DMHS的bin目录下(若是find不到,可以从别处相对应DMHS版本中copy所需要的文件);

    cp /opt/dmhs/db/bin/libdmoci.so /opt/dmhs/bin/
    
    • 1
    ./dmhs_server dmhs.hs 
    clear exec lsn #为了初始化日志的起始位置。
    
    • 1
    • 2

    在这里插入图片描述

    总结:

    笔者这次部署失败了,主要是因为作者这个DMHS来源版本跟当前DM8的版本对应不一致,需要专门的版本对应的下载安装。
    也就说是一一对应的,要不然总是报那个断错误。笔者后续再去官方找找资料,如果对应的版本一致,应该是如下的效果!!!

    正常情况下
    目标数据库启动之后输出
    在这里插入图片描述
    源数据库启动输出

    在这里插入图片描述
    然后去目标数据库查看
    刚刚源数据库上建的表,目标数据库也存在,则主从配置成功
    在这里插入图片描述
    参考官方文档:

    https://eco.dameng.com/community/training/e32a7f896ad9e9f5aec59c8ae5c13f36
    
    • 1

    问题最终解决方法

    笔者觉得应该是跟服务器环境有关系,则又将目标端的服务器重新还原映像重新安装了一遍DMHS插件。
    再启动,这次的问题与上次体现有些不同。

    在这里插入图片描述

    MGR[ERROR]: lib libdmhs_exec.so can not found,error code 2, libdodbc.so: cannot open shared object file: No such file or directory
    MGR[ERROR]: log exec start fail
    
    • 1
    • 2

    执行

    ldd libdmhs_exec.so           
    
    • 1

    在这里插入图片描述

    报libdodbc.so找不到

    find / -name libdodbc.so     #全盘搜索 
    
    • 1

    在这里插入图片描述
    此处搜索有多个,我们选择达梦数据库路径下的这个文件,而不是其他目录。

    cp /opt/dmdbms/bin/libdodbc.so /opt/dmhs/bin/     #复制到DMHS的bin路径下
    
    • 1

    再执行ldd libdmhs_exec.so

    ldd libdmhs_exec.so
    
    • 1

    在这里插入图片描述
    依次把缺少的文件复制到DMHS的bin路径下

    find / -name libdmelog.so
    
    • 1

    在这里插入图片描述

    cp /opt/dmhs/bin/stat/libdmelog.so /opt/dmhs/bin/
    
    • 1

    在这里插入图片描述

    find / -name libdmutl.so
    
    • 1

    在这里插入图片描述

    cp /opt/dmhs/bin/stat/libdmutl.so /opt/dmhs/bin/
    
    • 1

    在这里插入图片描述

    find / -name libdmclientlex.so
    
    • 1

    在这里插入图片描述

    cp /opt/dmhs/bin/stat/libdmclientlex.so /opt/dmhs/bin/
    
    • 1

    在这里插入图片描述

    find / -name libdmos.so
    
    • 1

    在这里插入图片描述

    cp /opt/dmhs/bin/stat/libdmos.so /opt/dmhs/bin/
    
    • 1

    在这里插入图片描述

    find / -name libdmcvt.so
    
    • 1

    在这里插入图片描述

    cp /opt/dmhs/bin/stat/libdmcvt.so /opt/dmhs/bin/
    
    • 1

    在这里插入图片描述

    find / -name libdmstrt.so
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    find / -name libdmmem.so
    
    • 1

    在这里插入图片描述

    cp /opt/dmhs/bin/stat/libdmmem.so /opt/dmhs/bin/
    
    • 1

    反反复复的查找缺失的文件,最终执行命令

    ldd libdmhs_exec.so
    
    • 1

    再没有发现缺失的文件报警,则代表成功了!
    补缺失的文件这个有难点,因为不知道到底应该是取那个文件,因为同名称的。
    笔者是把达梦8跟DMHS装同一个机器上,所以文件直接考,如果部署不同机器上,则需要拷过来,参考笔者的方法逐步一个一个文件测试,验证。

    在这里插入图片描述
    最终再执行

    ./dmhs_server dmhs.hs
    
    • 1
    start exec   #手打
    
    • 1

    下发的日志代表目标端的启动成功
    在这里插入图片描述

    再启动源端服务

    ./dmhs_server dmhs.hs
    clear exec lsn  #初始化归档日志起始位置
    COPY 0 " SCH.NAME='SYSDBA' " CREATE|INSERT|DICT #装载离线字典
    start cpt
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    在这里插入图片描述
    装载字典成功

    start cpt
    
    • 1

    在这里插入图片描述

    CPT[WARN]: log format is invalid, please check DM8 version, sub_type: 108
    
    • 1

    查了查网上的资料,意思说DMHS版本需要与数据库达梦8版本一一对应,很显然数据库版本高了,数据库版本是2022年9月份的,这个DMHS是2021年12月,不是一个时期的。而且达梦官网也没有下载历史版本的途径,这次只能等待以商务的方式解决获取对应版本的DMHS再做测试了!!!!!

    笔者简介
    国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    ThreadPoolExecutor构造函数重要参数分析,以及创建线程池
    基于python+Django+SVM算法模型的文本情感识别系统
    快速幂算法的实现
    【剑指offer48:字符串的排列(下一次排列的进阶版本)】
    C# 扩展运算符(...)的详细解析
    Today‘s文章_signature
    Linux vi vim
    07.智慧商城——商品详情页、加入购物车、拦截器封装token
    华夏ERP打包手册
    涅槃:时序数据库的终局与重生
  • 原文地址:https://blog.csdn.net/nasen512/article/details/133382689