暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【YashanDB认证】安装部署数据迁移平台YMP

Kubee 2024-07-18
222

数据迁移平台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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论