达梦数据库是一款非常成熟的国产数据库,是完全自主研发的国产数据库,达梦数据库是很多国产化机构的数据库选择,所以福哥顺应大趋势也要好好学习一下达梦数据库。
福哥之前一直是使用MySQL数据库的,现在切换达梦数据库的话有很多的地方不适应,想着如果可以将达梦数据库的数据实时地同步到MySQL数据库里面就好了,这不发现达梦团队有一个DMHS工具可以实现这个目的。
一起来学习学习吧~~
注意:现在达梦的DMHS工具不能随便下载了,而且不同的数据库的安装包也不一样,需要的可以跟销售联系~~
主机TFDM-ARM-100,IP地址192.168.122.100,达梦端口5236。
主机TFDM-ARM-200,IP地址192.168.122.200,MySQL端口3306
首先在TFDM-ARM-100上面安装DM8,这个可以参考下面的教程,这是福哥之前编写的。
https://tongfu.net/home/35/blog/513835.html
DMHS工具是通过Java实现的,这里需要在TFDM-ARM-200上面安装mysql-connector-odbc库。
mysql-connector-odbc库需要从MySQL官网下载。
https://downloads.mysql.com/archives/c-odbc/
因为用的是ARM系统所以选择了ARM版本的安装包。

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
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
如果/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

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

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


在TFDM-ARM-100上面的DM8库的dm.ini里开启ARCH设置。
ARCH_INI = 1 RLOG_APPEND_LOGIC = 1
在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
在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上面的DM8库执行如下SQL语句。
SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y';

在TFDM-ARM-100上面的DM8库执行如下SQL语句。
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';

在TFDM-ARM-100上面的DM8库执行如下SQL语句。
SELECT PATH FROM SYS.V$RLOGFILE;

在TFDM-ARM-100上面的DM8库执行如下SQL语句。
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'FAST_COMMIT';

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

在TFDM-ARM-100的DM8数据库的disql里面执行如下命令,遇到输入值可以直接敲回车继续。
START /tongfunet/env/dmhs/scripts/ddl_sql_dm8.sql
在TFDM-ARM-100上面的DM8库执行如下SQL语句。
SELECT OWNER, TABLE_NAME, STATUS FROM DBA_TABLES WHERE OWNER = 'SYSDBA' AND TABLE_NAME LIKE 'DMHS%';

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>
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>
首先要把DM8和DMHS的bin目录加到ldconfig里面,否则会提示找不到动态库。

清理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_server启动dmhs.hs。
/tongfunet/env/dmhs/bin/dmhs_server /tongfunet/env/dmhs/bin/dmhs.hs

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

清理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_server启动dmhs.hs。
/tongfunet/env/dmhs/bin/dmhs_server /tongfunet/env/dmhs/bin/dmhs.hs

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


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


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

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