数据迁移平台YMP(Yashan Migration Platform)
支持异构数据库和YashanDB之间的数据迁移,迁移评估,数据校验的能力。YMP提供可视化服务。
架构

支持的数据库产品
源端(上游)数据库
- Oracle:11g,12c,19c,21c
- MySQL:5.6,5.7,8.0
- 达梦:dm8
目标端(下游)数据库
- YashanDB:v23.2
部署实施
环境说明
网络端口
| YMP监听 | 数据库监听 | 主机间通信 | yasom | yasagent |
|---|---|---|---|---|
| 8090 | 8091 | 8092 | 8093 | 8094 |
实验环境
| 角色 | IP地址 | 数据库 |
|---|---|---|
| 源端(上游) | 192.168.10.180 | MySQL 8.0 |
| 目标端(下游) | 192.168.10.181 | yashandb-personal-23.2.1.100 |
| YMP | 192.168.10.181 | yashan-migrate-platform-v23.2.1.3 |
系统环境配置
创建用户
useradd -d /home/yashan -m yashan
echo "yashan"|passwd --stdin yashan
创建目录
mkdir -p /ups/app/ymp chown -R yashan:yashan /ups/app/ymp
操作系统资源限制
max user processes最大用户线程数不小于65535
# 查看最大用户线程数
ulimit -u
cat > /etc/security/limits.d/90-nproc.conf <<-'EOF'
yashan soft nproc 65536
yashan hard nproc 65536
EOF
sysctl -p
防火墙
关闭防火墙
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
白名单端口
# 1. 查看防火墙端口开放情况
firewall-cmd --zone=public --list-ports
# 添加8090端口白名单,--permanent 永久生效
firewall-cmd --zone=public --add-port=8090/tcp --permanent
# 重新加载配置
firewall-cmd --reload
# 检查确认
firewall-cmd --zone=public --query-port=8090/tcp
firewall-cmd --zone=public --list-ports
# 删除已添加的端口
firewall-cmd --zone=public --remove-port=8090/tcp --permanent
libaio动态库
YMP运行需要libaio动态库
# 查看是否已安装libaio动态库
rpm -qa | grep libaio
# 若未有版本信息打印,安装libaio
yum install -y libaio
OCI环境(可选)
迁移Oracle到YashanDB场景,需要安装OCI环境。
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html#license-lightbox
仅支持OCI Version 19.19.0.0.0及以上版本
# 解压
su - yashan
unzip instantclient-basic-linux.x64-19.23.0.0.0dbru.zip -D /ups/app
sudo chown -R yashan:yashan instantclient-basic-linux
YashanDB环境(可选)
使用默认内置库时,可跳过。即在部署YMP时,创建一个单机YashDB数据库实例
使用外部现有的YashanDB数据库作为内置库时,即YMP安装时不再安装YashanDB数据库。需创建一个专用YMP用户。
-- 创建一个ymp用户(以YMP_DEFAULT为例)并为其授权
create user YMP_DEFAULT IDENTIFIED BY ymppw602 DEFAULT TABLESPACE users;
GRANT ALL PRIVILEGES TO YMP_DEFAULT;
GRANT DBA TO YMP_DEFAULT;
安装JDK
YMP仅支持在JDK8或JDK11的环境
# 配置环境变量
cat > /etc/profile/jdk8.sh <<-'EOF'
export JAVA_HOME=/usr/local/jdk8
export PATH=${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin:${PATH}
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:${CLASSPATH}
EOF
# 安装成功后查看JDK版本信息
. /etc/profile/jdk8.sh
java -version
部署YMP
YashanDB作为内置库,安装部署YMP。
YashanDB的安装部署参考之前的文档。
更改内置库SYS用户默认密码(可选)
cd yashan-migrate-platform/bin
sh ./ymp.sh password --sys yasdb_123
解压软件包
su - yashan
cd /ups/soft
unzip yashan-migrate-platform-v23.2.1.3-linux-x86-64.zip
查看软件版本
cd yashan-migrate-platform/bin
sh ./ymp.sh -v
安装参数文件
配置内置库的密码和端口
cd yashan-migrate-platform/conf
cat > db.properties <<-'EOF'
# db.properties
YASDB_PASSWORD=3uplbtbnyZ5XFRtpg5F5JQ== # 默认内置库sys用户默认密码密文
YASDB_PORT=8091 # 默认内置库默认端口号
YASDB_CHARACTER_SET=UTF8 # 默认内置库字符集,还可选择ASCII, ISO88591, GBK
EOF
YMP配置文件
cd yashan-migrate-platform/conf
cat > application.properties <<-'EOF'
# YMP服务端口
server.port=8090
# 用户登录后空闲过期时间,单位秒(s),默认15分钟
shiro.session.timeout=900
# YMP使用的最大堆内存,支持按绝对内存指定(如:4G)和按物理机实际内存的百分比指定(如:50%),当迁移达梦数据库时,此值可以适当调大(建议≥16G)
ymp_memory=4G
# YMP使用的堆外内存,单位: GB
ymp_direct_memory=2
# YMP使用的时区ID
time_zone_id=GMT+8:00
# ========================================YMP内置数据库=============================================
# YMP内置数据库连接信息,若想自定义内置数据库则可以提前修改以下配置信息后再部署即可
spring.datasource.url=jdbc:yasdb://127.0.0.1:8091/yashan
spring.datasource.username=YMP_DEFAULT
spring.datasource.password=BPZ0VmrxlFoUgfm1UOS2pg==
spring.datasource.largePoolSize=64M
spring.datasource.cursorPoolSize=64M
# 默认内置库表类型,默认HEAP,可选HEAP,TAC,LSC
spring.datasource.defaultTableType=HEAP
spring.datasource.openCursors=3000
spring.datasource.sharePoolSize=2G
spring.datasource.dateFormat=yyyy-mm-dd hh24:mi:ss
spring.datasource.ddlLockTimeout=2
# ========================================评估=============================================
# YMP的最大并行任务数
task.parallel.max-num=500
# 预计数据迁移速度,KB/s。修改会影响评估结果预计迁移时间的大小
commons.dataMigrateSpeed=51200
# 预计对象迁移速度,number/s。修改会影响评估结果预计迁移时间的大小
commons.objMigrateSpeed=200
# 评估任务单个会话获取DDL的数量,如果Oracle性能较差,则需要降低该值
assessment.ddlCount=50
# 评估任务最多同时拥有的会话数,如果Oracle性能较差,则需要降低该值
assessment.maxThreadCount=20
# 评估内置库表类型是否为LSC,默认为false
isLscTable=false
# 拦截的Oracle数据源db/schema黑名单
schemaBlackList.oracle=ANONYMOUS,APEX_030200,APEX_PUBLIC_USER,APPQOSSYS,BI,CTXSYS,DBSNMP,DIP,EXFSYS,FLOWS_FILES,HR,IX,MDDATA,MDSYS,MGMT_VIEW,OE,OLAPSYS,ORACLE_OCM,ORDDATA,ORDPLUGINS,ORDSYS,OUTLN,OWBSYS,OWBSYS_AUDIT,PM,SCOTT,SH,SI_INFORMTN_SCHEMA,SPATIAL_CSW_ADMIN_USR,SPATIAL_WFS_ADMIN_USR,SYS,SYSMAN,SYSTEM,WMSYS,XDB,XS$NULL
# 拦截的MySQL数据源db/schema黑名单
schemaBlackList.mysql=information_schema,mysql,performance_schema,sys
# 拦截的dm数据源db/schema黑名单
schemaBlackList.dm=SYS,SYSDBA,SYSSSO,SYSAUDITOR,CTISYS
# ========================================迁移=============================================
# 元数据迁移过程中源端、目标端查询视图连接数。在元数据迁移过程中会有分批量的查询的动作, 需要开启多个查询连接并行查询。该参数配置元数据迁移的源端、目标端查询的并行线程数,决定了对数据库的查询最大连接数,不设置默认20
migration.parallel.query=20
# 元数据迁移过程中目标端执行创建连接数。在元数据迁移过程中会并行把对象在目标端的执行,以提升迁移效率。该参数配置元数据迁移的目标端DDL执行的并行线程数,决定了连接数据库的执行最大连接数,不设置默认20。migration.parallel.query和migration.parallel.execute的连接总和,是最终迁移过程中所有的目标端数据库连接数。
migration.parallel.execute=20
# 创建索引是否使用并行参数,true/TRUE:使用,false/FALSE:不使用
migration.parallel.createIndexUseParallel=true
# 索引创建的并行度,需要考虑migration.parallel.execute。例:migration.parallel.execute:10,migration.parallel.index: 5,表示,同时10个连接在并行建索引,每个索引的并行度是5(CREATE INDEX XXX PARALLEL 5)。不填默认CPU核数。
migration.parallel.index=5
# 数据迁移前是否将表设为nologging,默认为false
setNoLogging=false
# 导出oracle时使用的导出方式,支持 [dts, jdbc] 两种方式
export.oracle.tool=dts
# 导出时每个csv文件的行数
export.csv.exportRowsEveryFile=2000000
# 迁移成功时候是否删除csv文件
export.csv.isRemoveCsvFileInSuccess=true
# csv文件存储路径包含对schema和table的拼接,schema名或table名中包含以上字符时,将会被替换,以避免被操作系统识别错误导致迁移失败;不过这可能会使某些表(比如AA$与AA.)在替换后使用的csv文件存储路径相同,导致迁移失败(No such file or directory),可以通过重新迁移失败表来解决
export.csv.path.replacement.from=\ /'."*$
# 发生csv文件存储路径字符替换时(详见export.csv.path.replacement.from),指定替换的目标字符或字符串
export.csv.path.replacement.to=_
# 导出时大表拆分的个数
export.table.splitCount=5
# 导出时触发大表拆分的行数
export.table.splitConditionCount=10000000
# 导出时触发大表拆分的表大小(G)
export.table.splitConditionSize=5
# 导出时带lob字段大表拆分的个数
export.lobTable.splitCount=5
# 导出时触发带lob字段大表拆分的行数
export.lobTable.splitConditionCount=1000000
# 导出时触发带lob字段大表拆分的表大小(G)
export.lobTable.splitConditionSize=5
# 使用jdbc导出时每个csv文件的最大行数
export.jdbc.thresholdForSplittingFileLines=5000000
# 使用jdbc导出时每个csv文件的最大大小(M)
export.jdbc.thresholdForSplittingFileSize=3072
# 一行数据中所有lob字段小于指定字节长度时会优化为行内导入
export.jdbc.lob.headSize=8192
# 在数据迁移阶段,源端数据类型是char、nchar、character时,移除数据右侧空格
export.jdbc.charRightTrim=true
# 在数据迁移阶段,源端数据类型是varchar、nvarchar时,移除数据右侧空格
export.jdbc.varcharRightTrim=false
# #yasldr More References: http://doc.yashandb.com/yashandb/22.2/zh/%E5%B7%A5%E5%85%B7%E6%89%8B%E5%86%8C/yasldr/yasldr%E4%BD%BF%E7%94%A8%E6%8C%87%E5%AF%BC.html
# yasldr导入时的并行度
import.degree_of_parallelism=16
# yasldr导入时每批次的CSV数据行数
import.batch_size=2048
# yasldr导入方式,包括BASIC方式和BATCH方式
import.mode=BATCH
import.SENDERS=7
import.CSV_CHUNK_SIZE=128
# ========================================校验=============================================
# 校验任务限制每个数据源支持的最大连接数
checkTask.datasource.max-connection=500
# 校验任务获取连接超时时间,单位:ms
checkTask.datasource.connection-timeout=10000
# 校验任务获取的连接池中维持的最小连接数
checkTask.datasource.minimum-idle=0
# 校验任务的最大并行任务数
checkTask.task.parallel.max-num=20
# 校验任务的子任务的最大并行任务数,即一个任务多少个表在同时校验
checkTask.subTask.parallel.max-num=200
# 校验任务的全量校验对YashanDB的FLOAT数据类型的校验精度
checkTask.checkFloatPrecision=6
# 校验任务的全量校验对YashanDB的Double数据类型的校验精度
checkTask.checkDoublePrecision=15
# 校验任务的数据类型映射源端是char数据类型就移除源端和目标端的数据右侧空格进行对比
checkTask.charRightTrim=true
# 校验任务的数据类型映射源端是varchar数据类型就移除源端和目标端的数据右侧空格进行对比
checkTask.varcharRightTrim=false
# MySQL和DM的“”转换成NULL值进行校验
checkTask.emptyStringConvertToNull=true
# MySQL的数据类型YEAR、TIME、DATE、DATETIME、TIMESTAMP都是0值转换成NULL进行校验
checkTask.zeroDateConvertToNull=true
# LOB类型一次获取大小(数组长度)
checkTask.lobBufferSize=1024
# LOB类型差异展示长度,确保小于bufferSize(数组长度)
checkTask.lobPerformSize=200
# CLOB类型一次获取大小(数组长度)
checkTask.clobBufferSize=1080
EOF
执行安装命令
cd yashan-migrate-platform/bin
sh ./ymp.sh -h
方式一:安装内置库并启动YMP
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh install --db /ups/soft/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz
方式二(Oracle做数据源的推荐方案):安装内置库和OCI客户端并启动YMP
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh install --db /ups/soft/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz --path /ups/soft/instantclient-basic-linux.x64-19.23.0.0.0dbru.zip
方式三:使用外部YashanDB数据库作为内置库安装YMP并启动YMP
修改配置文件
cd yashan-migrate-platform/conf
# 更改连接信息 application.properties
cd yashan-migrate-platform/bin
sh ./ymp.sh connection --url 192.168.10.181:8091 --username YMP_NEW --password ymp_new
不迁移源端为Oracle的数据库场景
安装yasldr依赖库,并启动YMP
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh installnodb --db /ups/soft/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz
源端有Oracle数据库场景
安装yasldr依赖库和OCI客户端并启动YMP
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh installnodb --db /ups/soft/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz --path /ups/soft/instantclient-basic-linux.x64-19.23.0.0.0dbru.zip
检查状态
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh status
Web UI访问YMP
使用浏览器打开 http://IP:PORT/,PORT默认8090,初始账户名和密码是(admin/admin)
卸载YMP
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh uninstall
# 使用uninstall功能时可携带-f参数,强制清理环境
sh ./ymp.sh uninstall -f
# 检查
ps -ef | grep yashan
服务管理
启动YMP
默认内置库
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh start
外部内置库
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh startnodb
停止YMP
默认内置库
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh stop
外部内置库
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh stopnodb
重启YMP
默认内置库
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh restart
外部内置库
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh restartnodb
更换组件
更新yasldr组件
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh replace --yasldr /ups/soft/yashandb-personal-23.2.3.100-linux-x86_64.tar.gz
需要重启YMP生效
更新OCI组件
解压OCI软件
# 解压
su - yashan
unzip instantclient-basic-linux.x64-19.23.0.0.0dbru.zip -D /ups/app
sudo chown -R yashan:yashan instantclient-basic-linux
更改环境变量
su - yashan
cd yashan-migrate-platform/db/conf
# 修改LD_LIBRARY_PATH行,指定新的OCI路径
vi ymp_migrate.bashrc
export LD_LIBRARY_PATH=/ups/app/instantclient-basic-linux:/ups/app/yashan-migrate-platform/bin/yasdts/lib
重启YMP
su - yashan
cd yashan-migrate-platform/bin
sh ./ymp.sh restart
迁移实例
下面以迁移MySQL到YashDB为例进行说明。待完善
附录
YCA官方报名链接:https://www.yashandb.com/YCA_courses
参考文档
https://doc.yashandb.com/ymp/23.2/zh/%E4%BA%A7%E5%93%81%E7%AE%80%E4%BB%8B/%E4%BA%A7%E5%93%81%E6%A6%82%E8%BF%B0.html
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




