达梦数据库通过DMHS工具同步数据到MySQL数据库【20220826】

鬼谷子叔叔 - 2022-07-11 16:52

介绍

介绍

达梦数据库是一款非常成熟的国产数据库,是完全自主研发的国产数据库,达梦数据库是很多国产化机构的数据库选择,所以福哥顺应大趋势也要好好学习一下达梦数据库。

福哥之前一直是使用MySQL数据库的,现在切换达梦数据库的话有很多的地方不适应,想着如果可以将达梦数据库的数据实时地同步到MySQL数据库里面就好了,这不发现达梦团队有一个DMHS工具可以实现这个目的。

一起来学习学习吧~~

注意:现在达梦的DMHS工具不能随便下载了,而且不同的数据库的安装包也不一样,需要的可以跟销售联系~~

环境

达梦

主机TFDM-ARM-100,IP地址192.168.122.100,达梦端口5236。

MySQL

主机TFDM-ARM-200,IP地址192.168.122.200,MySQL端口3306

配置

安装DM8(TFDM-ARM-100)

首先在TFDM-ARM-100上面安装DM8,这个可以参考下面的教程,这是福哥之前编写的。

https://tongfu.net/home/35/blog/513835.html

安装mysql-connector-odbc(TFDM-ARM-200)

DMHS工具是通过Java实现的,这里需要在TFDM-ARM-200上面安装mysql-connector-odbc库。

mysql-connector-odbc库需要从MySQL官网下载。

https://downloads.mysql.com/archives/c-odbc/

因为用的是ARM系统所以选择了ARM版本的安装包。

home/topic/2022/0826/14/5ea239b38f5c1c6e4aebe32a7da8e568.png

https://downloads.mysql.com/archives/get/p/10/file/mysql-connector-odbc-8.0.29-1.el8.aarch64.rpm

wget https://downloads.mysql.com/archives/get/p/10/file/mysql-connector-odbc-8.0.29-1.el8.aarch64.rpm
rpm -ivh mysql-connector-odbc-8.0.29-1.el8.aarch64.rpm

安装unixODBC(TFDM-ARM-200)

DMHS工具需要ODBC库,这里需要在TFDM-ARM-200上面安装unixODBC库,直接yum即可。

yum -y install unixODBC

配置ODBC库,打开/etc/odbc.ini添加如下内容。

[ODBC Data Sources]
myodbc8w     = MyODBC 8.0 UNICODE Driver DSN
myodbc8a     = MyODBC 8.0 ANSI Driver DSN

[myodbc8w]
Driver       = /usr/lib64/libmyodbc8w.so
Description  = Connector/ODBC 8.0 UNICODE Driver DSN

[myodbc8a]
Driver       = /usr/lib64/libmyodbc8a.so
Description  = Connector/ODBC 8.0 ANSI Driver DSN

安装DMHS

TMP空间不足(全部)

如果/tmp空间很小的话,我们执行安装脚本的时候会包如下错误。

/tmp/DMHSInstall/source/jdk/bin/java: error while loading shared libraries: /tmp/DMHSInstall/source/jdk/bin/../lib/aarch64/jli/libjli.so: file too short

home/topic/2022/0825/17/00024488814198b9beff86c262cf8abc.png

解决方法就是通过设置环境变量DMHS_INSTALL_TMPDIR指定一个空间比较大的目录作为/tmp的替代。

mkdir -p /tmp2
export DMHS_INSTALL_TMPDIR=/tmp2

home/topic/2022/0825/17/505512cc2dc97630ada6f3d04b42e9b6.png

安装DMHS(全部)

DMHS工具需要在TFDM-ARM-100上面和TFDM-ARM-200上面都安装一下,这里福哥只给一个例子。

./dmhs.bin -i

home/topic/2022/0825/17/a1c7ae01e333893d6589c7794d157227.pnghome/topic/2022/0825/17/2b20dca774f613257b841a2553f1fbf4.png

配置ARCH

开启ARCH(TFDM-ARM-100)

在TFDM-ARM-100上面的DM8库的dm.ini里开启ARCH设置。

ARCH_INI = 1
RLOG_APPEND_LOGIC = 1

配置dmarch.ini(TFDM-ARM-100)

在TFDM-ARM-100上面的DM8库的dm.ini所在目录下面建立dmarch.ini,设置如下内容。

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /tongfunet/env/dm8data/dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 20480

重启DM数据库实例(TFDM-ARM-100)

在TFDM-ARM-100上面的重新启动DM8数据库实例。

kill -10 2247631
/tongfunet/env/dm8dbms/bin/dmserver /tongfunet/env/dm8data/tfums/dm.ini > /tongfunet/env/dm8data/tfums.log 2>&1 &

验证归档配置(TFDM-ARM-100)

在TFDM-ARM-100上面的DM8库执行如下SQL语句。

SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y';

home/topic/2022/0825/17/ebda1ae89673cff7692995f6da8a183a.png

验证逻辑日志配置(TFDM-ARM-100)

在TFDM-ARM-100上面的DM8库执行如下SQL语句。

SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';

home/topic/2022/0825/17/e6395aa828364f6f03f09a38606f4f73.png

检查日志(TFDM-ARM-100)

在TFDM-ARM-100上面的DM8库执行如下SQL语句。

SELECT PATH FROM SYS.V$RLOGFILE;

home/topic/2022/0825/17/93b65b00246c6da76711360a3831fb38.png

检查FAST_COMMIT(TFDM-ARM-100)

在TFDM-ARM-100上面的DM8库执行如下SQL语句。

SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'FAST_COMMIT';

home/topic/2022/0825/17/c66a31e6eeff43733d5ca4760d488aa6.png

配置DDL

导入DDL脚本(TFDM-ARM-100)

在TFDM-ARM-100的DMHS的安装目录的scripts目录下。

home/topic/2022/0825/17/169018268e760c8af26a776b7830f34a.png

在TFDM-ARM-100的DM8数据库的disql里面执行如下命令,遇到输入值可以直接敲回车继续。

START /tongfunet/env/dmhs/scripts/ddl_sql_dm8.sql

检查DDL(TFDM-ARM-100)

在TFDM-ARM-100上面的DM8库执行如下SQL语句。

SELECT OWNER, TABLE_NAME, STATUS FROM DBA_TABLES WHERE OWNER = 'SYSDBA' AND TABLE_NAME LIKE 'DMHS%';

home/topic/2022/0825/17/eace176c5c54ab2ed458c13e2fa22a35.png

配置DMHS

配置达梦端DMHS(TFDM-ARM-100)

base部分是dmhs的基本参数,5345是dmhs的服务端口。

cpt部分用来配置同步源端参数,源端是达梦数据库的参数。

cpt.send部分用来配置同步目标端参数,此处是目标端DMHS的参数。

<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
    <base>
        <lang>ch</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>192.168.122.100</db_server>
        <db_port>5236</db_port>
        <char_code>PG_UTF8</char_code>
        <db_user>SYSDBA</db_user>
        <db_pwd>SYSDBA</db_pwd>
        <ddl_mask>op:obj</ddl_mask>
        <arch>
            <clear_interval>600</clear_interval>
            <clear_flag>0</clear_flag>
        </arch>
        <send>
            <ip>192.168.122.200</ip>
            <mgr_port>5345</mgr_port>
            <data_port>5346</data_port>
            <trigger>1</trigger>
            <constraint>1</constraint>
            <identity>1</identity>
            <filter>
                <enable>
                    <item>tfums.*</item>
                </enable>
            </filter>
        </send>
    </cpt>
</dmhs>

配置MySQL端DMHS(TFDM-ARM-200)

base部分是dmhs的基本参数,5345是dmhs的服务端口。

recv部分是用来配置接收端参数,接收端是MySQL数据库的参数。

recv.exec部分用来配置接收端参数,此处是接收端MySQL数据库的参数。

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
    <base>
        <lang>ch</lang>
        <mgr_port>5345</mgr_port>
        <chk_interval>2</chk_interval>
        <ckpt_interval>45</ckpt_interval>
        <siteid>2</siteid>
    </base>
    <recv>
        <data_port>5346</data_port>
        <exec>
            <db_type>mysql</db_type>
            <db_server>localhost</db_server>
            <db_user>root</db_user>
            <db_pwd>Abcd@123</db_pwd>
            <driver>MySQL ODBC 8.0 Unicode Driver</driver>
            <db_port>3306</db_port>
            <db_name>tfums</db_name>
            <exec_mode>1</exec_mode>
            <exec_thr>8</exec_thr>
            <exec_sql>1024</exec_sql>
            <exec_trx> 5000 </exec_trx>
            <exec_rows>250</exec_rows>
            <commit_policy>0</commit_policy>
            <exec_policy>2</exec_policy>
            <msg_col_size>8000</msg_col_size>
            <toggle_case>1</toggle_case>
            <level>0</level>
        </exec>
    </recv>
</dmhs>

启动DMHS

配置达梦端ldconfig(TFDM-ARM-100)

首先要把DM8和DMHS的bin目录加到ldconfig里面,否则会提示找不到动态库。

home/topic/2022/0826/14/8881d7d4cd52d62b738378d6ac1b9515.png

清理冲突动态库(TFDM-ARM-100)

清理ldconfig的三个目录下面的libssl*和libcrypt*库文件。

rm -f /tongfunet/env/dmhs/bin/stat/libssl.so*
rm -f /tongfunet/env/dmhs/bin/stat/libcrypto.so*
rm -f /tongfunet/env/dmhs/hs_agent/libssl.so*
rm -f /tongfunet/env/dmhs/hs_agent/libcrypto.so*

启动达梦端DMHS(TFDM-ARM-100)

使用dmhs_server启动dmhs.hs。

/tongfunet/env/dmhs/bin/dmhs_server /tongfunet/env/dmhs/bin/dmhs.hs

home/topic/2022/0826/13/92a97408183647fa3dcc294b2975a85a.png

配置MySQL端ldconfig(TFDM-ARM-200)

首先要把DMHS的bin目录加到ldconfig里面,否则会提示找不到动态库。

home/topic/2022/0826/14/2ec17858aae5b753b8c38d4e7da61c6c.png

清理冲突动态库(TFDM-ARM-200)

清理ldconfig的三个目录下面的libssl*和libcrypt*库文件。

rm -f /tongfunet/env/dmhs/bin/stat/libssl.so*
rm -f /tongfunet/env/dmhs/bin/stat/libcrypto.so*
rm -f /tongfunet/env/dmhs/hs_agent/libssl.so*
rm -f /tongfunet/env/dmhs/hs_agent/libcrypto.so*

启动MySQL端DMHS(TFDM-ARM-200)

使用dmhs_server启动dmhs.hs。

/tongfunet/env/dmhs/bin/dmhs_server /tongfunet/env/dmhs/bin/dmhs.hs

home/topic/2022/0826/14/d2728a14fcc020cf0ba1de61ba5faab0.png

启动DMHS同步

登录达梦端DMHS(TFDM-ARM-100)

进入dmhs的bin目录下,执行如下命令。

./dmhs_console

home/topic/2022/0826/15/cf4c8d09d793879bc8b2447a963b66d0.png

home/topic/2022/0826/15/feccd63cc2b77035caea08ae60843896.png

登录MySQL端DMHS(TFDM-ARM-200)

进入dmhs的bin目录下,执行如下命令。

./dmhs_console

home/topic/2022/0826/15/e178b2a21cca440a8f72a3a30714cb69.png

home/topic/2022/0826/15/5582004ddf6ddeadf95fb4b57066859a.png

MySQL端开始执行进程(TFDM-ARM-200)

在登录后的终端执行如下命令。

start exec

home/topic/2022/0826/15/33a0b450c9fddd7bfebc8247d7a04c77.png

达梦端清理执行LSN(TFDM-ARM-100)

在登录后的终端执行如下命令。