为了在外网通过达梦工具将MySQL数据导入内网的达梦数据库(需跳板机访问),可按照以下步骤操作:
通过跳板机将外网机器的本地端口与内网达梦数据库端口绑定,实现间接访问。
端口转发要设置sshd_config的AllowTcpForwarding yes
命令示例:
ssh -N -L <本地端口>:<达梦数据库内网IP>:<达梦端口> <跳板机用户名>@<跳板机IP> -p <跳板机SSH端口>
参数说明:
<本地端口>
:外网机器上的空闲端口(如 3307
)。
<达梦数据库内网IP>:<达梦端口>
:内网达梦的实际地址(如 192.168.1.100:5236
)。
<跳板机用户名>@<跳板机IP>
:跳板机的SSH登录信息。
执行后:访问外网机器的 localhost:3307
等价于访问内网的达梦数据库。
在达梦工具(如 DTS 或 dmfldr)中,使用以下配置:
数据库类型:达梦
主机:127.0.0.1
或 localhost
端口:3307
(即SSH隧道绑定的本地端口)
用户名/密码:达梦数据库的账号权限。
导出MySQL数据:
使用 mysqldump
导出数据为SQL文件:
mysqldump -u <mysql用户> -p <数据库名> > mysql_data.sql
或导出为CSV格式(适合表数据):
mysql -u <用户> -p -e "SELECT * FROM 表名" -B <数据库名> | sed 's/\t/,/g' > data.csv
通过DTS导入数据:
在DTS中选择 “文件→数据库” 任务。
源文件选择导出的SQL/CSV文件。
目标数据库配置为通过SSH隧道转发的达梦连接(localhost:3307
)。
执行映射和数据类型转换(注意达梦与MySQL的数据类型差异)。
从MySQL导出为文本文件:
mysql -u <用户> -p -e "SELECT * FROM 表名 INTO OUTFILE '/tmp/data.txt' FIELDS TERMINATED BY ','"
编写dmfldr控制文件(如 load.ctl
):
OPTIONS(characters_code='UTF-8', errors=1000, rows=100000, direct=true)LOAD DATA INFILE '/tmp/data.txt' INTO TABLE 目标表名 FIELDS ','
执行导入:
dmfldr userid=达梦用户/密码@localhost:3307 control=load.ctl
配置MySQL ODBC数据源:
在外网机器安装MySQL ODBC驱动,并配置DSN。
在达梦DTS中设置双数据源:
源:MySQL ODBC数据源。
目标:达梦数据库(通过SSH隧道地址 localhost:3307
)。
直接通过DTS界面执行跨库数据传输。
网络稳定性:SSH隧道可能因网络波动中断,建议使用 autossh
或 tmux
保持连接。
数据兼容性:
检查达梦与MySQL的字段类型、字符集(如 utf8mb4
)、保留字差异。
处理自增主键、索引、触发器等对象的迁移。
性能优化:
大批量数据导入时,分批次提交或调整事务大小。
达梦开启快速加载模式(如 dmfldr
的 direct=true
)。
权限检查:确保跳板机用户有权访问达梦数据库,且防火墙放行相关端口。
最新评论: