1.环境准备
(1)操作系统的用户权限
启动dmhs服务的操作系统用户最好是数据库的安装用户如果不能用数据库的安装用户,那么创建的dmhs服务用户必须要和数据库的安装用户在同一用户组中。
(2)硬件需求
内存需求
DMHS 需要的内存总量取决于分析线程以及执行线程的并发数,最少需要 1G 内存。
磁盘需求
DMHS 安装文件占用 277M,包括了管理工具以及管理界面占用的空间,另外需要一些额外的空间存储 DMHS 运行的日志文件。
(3)操作系统需求
Linux 系列操作系统
各种主流的 Linux 操作系统(如 Redhat、 Kylin)。
(4)网络需求
dm到mysql网络互通,端口可以访问。
(5)设置mysql本地链接
DMHS在运行时,需要加载本地MYSQL 动态库,linux/unix平台下为libmysqlclient.so。在部署DMHS 之前,需将libmysqlclient.so所在目录添加到共享库路径变量中。libmysqlclient.so通常位于/usr/local/mysql/lib目录中中。在LINUX/UNIX系统中,设置的方法如下:
vi ~/.bahs_profile
操作系统类型 | 设置命令 |
IBM AIX | export LIBPATH=$LIBPATH: /usr/local/mysql/lib |
HP UX | export SHLIB_PATH=$ SHLIB_PATH: /usr/local/mysql/lib |
其他LINUX/UNIX | export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/local/mysql/lib |
source ~/.bash_profile
(6) UNIXODBC安装
Mysql作为目的端,需要通过ODBC将源端数据库的操作同步到目的数据库,所以部署DMHS MYSQL 目的端的服务器,需要安装ODBC驱动及MYSQL ODBC。
推荐安装unixodbc2.3.2版本的odbc,下面介绍如何使用源码安装unixidbc。
下载unixodbc2.3.2源码unixODBC-2.3.2.tar.gz。
解压unixodbc源码
tar -zxvf unixODBC-2.3.2.tar.gz
进入unixodbc源码目录,编译源码
cd unixodbc-2.3.2
export CC=gcc
./configure --enable-drivers=no --with-iconv-char-enc=GB18030 --enable-gui=no --enable-iconv=yes
make
make install
注意:当服务器系统为UNIX/LINUX 64bits时,在./configure之前需执行export CFLAGS="-maix64 -DBUILD_REAL_64_BIT_MODE"export OBJECT_MODE=64
配置UNIXODBC
将操作系统当前目录切换到“/usr/local/etc”目录,修改 odbc.ini 和odbcinst.ini 参数。
odbc.ini 参数内容如下所示:
[mysql]
Driver=MySQL ODBC 5.1 Driver
DATABASE=mysql
DESCRIPTION=MYSQL ODBC 5.1 DRIVER
SERVER=127.0.0.1
UID=dmhs
PASSWORD=dmhs
odbcinst.ini参数内容如下所示:
[MySQL ODBC 5.1 Driver]
Driver=/usr/lib64/libmyodbc5.so
UsageCount=1
验证:isql -v mysql dmhs dmhs
(7)dm数据库环境准备
创建同步用户
需要在Dm库上创建一个用户dmhs需要DBA权限。
开启归档和逻辑日志
设置归档标记和逻辑日志标记。打开 DM7 服务器配置文件“dm.ini”,设置如下值:
ARCH_INI = 1
RLOG_APPEND_LOGIC = 1
注意:dm.ini 配置参数中“FAST_COMMIT”必须为 0,否则会导致逻辑日志不全而影响
同步。
配置dmarch.ini,在数据库目录下例子:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/arch #归档目录
ARCH_FILE_SIZE = 128 #归档文件大小,单位 MB
ARCH_SPACE_LIMIT = 10240#空间大小限制,0 表示不限制
修改参数后需要重启数据库服务
验证设置的正确性
SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y';
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';
检查在线日志,通过如下的查询:
SELECT PATH FROM SYS.V$RLOGFILE;
检查 FAST_COMMIT 参数是否为 0
select para_value from v$dm_ini where para_name = 'FAST_COMMIT'
如果需要同步DDL操作
需要在DM库上执行脚本ddl_sql_dm7.sql.。创建的脚本参见 DMHS 安
装目录下 scripts 子目录中“ddl_sql_dm7.sql”。
检查创建的触发器和辅助表是否有效,检查辅助表的语句:
select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
检查触发器的语句:
select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';
(8) Mysql数据库需求
创建dmhs的数据库同步用户dmhs
需要在mysql 库上创建一个用户dmhs需要DBA权限。
DMHS目标库约束/触发器限制
约束
DMHS同步过程中,需将将执行端MYSQL表中的外键禁用,否则,在对外键引用表进行更新时,可能会引起执行端MYSQL数据库操作错误。
触发器
DMHS同步过程中,需将将执行端MYSQL中的存在DML操作的触发器禁用,否则,在通过过程中,会对触发器操作的表进行二次操作,导致同步结果错误。
2.部署
(1)安装dmhs
根据数据库的类型选择不同版本DMSH安装包DMHSInstall.bin上传到安装目录下并且赋予该文件可执行权限:
./ DMHSInstall.bin -i
根据安装指引
选择安装语言
选择英文安装(这里选择的只是安装语言)。
选择密钥key文件
请选择key文件的位置。
选择安装类型
默认选择标准安装(1)
选择安装路径
选择DMHS的安装目录
是否初始化
选择统一部署
(2)源端配置文件(例子)
在dmhs的执行目录下
vi dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>ch</lang>
<version>2.0</version>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
</base>
<cpt>
<db_type>DM7</db_type>
<db_server>192.168.73.101</db_server>
<db_port>5236</db_port>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<char_code>PG_GB18030</char_code>
<ddl_mask>TABLE:OPERATION</ddl_mask>--配置ddl
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send>
<ip>192.168.56.102</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<net_turns>0</net_turns>
<crc_check>0</crc_check>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<filter>
<enable>
<item>TESTA.*</item>--需要同步的白名单
</enable>
<disable>
<item>TESTA.TABLE_1</item>--过滤的表
</disable>
</filter>
<map>
<item>TESTA.*==TESTA.*</item>--映射关系(模式名.*==数据库名.*)
</map>
</send>
</cpt>
</dmhs>
(3)目的端配置文件
在dmhs的执行目录下
vi dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
</base>
<recv>
<data_port>5346</data_port>
<exec>
<db_type>MYSQL</db_type>
<db_name>TESTA</db_name>---数据库名,所以一个dmhs配置一个数据库名
<db_server>192.168.73.102</db_server>
<db_user>root</db_user>
<db_pwd>root</db_pwd>
<db_port>3306</db_port>
<level>0</level>
<exec_mode>1</exec_mode>
<exec_thr>8</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx>5000</exec_trx>
<exec_rows>1000</exec_rows>
<case_sensitive>1</case_sensitive>
<toggle_case>0</toggle_case>
<exec_policy>2</exec_policy>
<ddl_continue>1</ddl_continue>
<commit_policy>1</commit_policy>
<enable_merge>1</enable_merge>
<affect_row>0</affect_row>
</exec>
</recv>
</dmhs>
(4)开启dmhs服务
配置后台启动脚本
在bin目录的service_template中复制DmhsService到bin中
vi DmhsService找到以下内容进行修改
DMHS_HOME=/home/mysql/dmhs ---dmhs安装路径
#REPLACE program dir
PROG_DIR=/home/mysql/dmhs/bin ---dmhs执行路径
#REPLACE program config path
CONF_PATH=/home/mysql/dmhs/bin/dmhs.hs --配置文件dmhs.hs的路径
启动dmhs服务
进入bin目录执行 ./dmhs_serverd start
开启目的端
进入bin目录登录控制台
./dmhs_console
connect ip:mgr_port
开启exec
start exec
开启源端
配置后台启动脚本
在bin目录的service_template中复制DmhsService到bin中
vi DmhsService找到以下内容进行修改
DMHS_HOME=/home/dm/dmhs ---dmhs安装路径
#REPLACE program dir
PROG_DIR=/home/dm/dmhs/bin ---dmhs执行路径
#REPLACE program config path
CONF_PATH=/home/dm/dmhs/bin/dmhs.hs --配置文件dmhs.hs的路径
启动dmhs服务
进入bin目录执行 ./dmhs_serverd start
开启源端
进入bin目录登录控制台
./dmhs_console
connect ip:mgr_port
装载字典
LOAD 0 “SCH.NAME=’TESTA’ ”DICT
开启cpt
Start cpt
(5) 部署期间遇到的问题
问题1:
原因是以为mysql connect odbc驱动版本和mysql8版本差距太大,建议要用相同版本的
问题2:
如果发现目的数据库没有数据过去,而且日志没有报错,检查<db_name>配置,这个配置区分大小写
问题3:
一般在设置同步映射关系是
模式名.表名==数据库.表名