0、前言
在数据库行业,数据迁移的需求是常见的。面对不同迁移需求,也有各自适合的迁移方案。
前期测试过使用OGG同步Oracle数据到YashanDB,功能上是能够跑通的,但是这是商业产品,仅用于个人的测试。
还有了解到kettle、DataX也可以同步数据到YashanDB,这些是开源的产品,如果遇到问题可能要依赖社区资源解决。
YMP是YashanDB官方提供的迁移工具,在兼容性上应该和YashanDB做的更好,有问题也可以咨询原厂解决,所以本次体验如何使用YMP来同步数据到YashanDB。
1.机器资源准备&YMP安装部署
1.1 资源准备
在整个测试中,我们可能会使用到Oracle、MySQL、DM、YashanDB以及YMP同步工具,这些应用都需要环境部署。
准备1台虚拟机,用于安装YMP(其它环境的准备在此不做其它说明):
- 操作系统:CentOS 7.9,YMP当前仅支持Linux,所以需要准备一台虚拟机安装YMP。
- cpu/内存/磁盘:4C/32G/500G
- IP:192.168.33.176
YMP是通过web端浏览器中图形化界面操作使用,当前不支持命令创建和配置同步任务。
1.2 安装YMP
参考官方文档安装部署YMP,初次使用推荐大家按照默认的配置以及步骤去安装,可以快速将环境部署起来。熟练使用之后再做自定义选项的调整。
1.2.1 安装前的准备
强烈建议参考官方手册操作,做好安装前的准备,以免后面安装过程遇到不必要的问题。
几个常见且容易忽略的问题,特别注意:
1.防火墙关闭(或者配置白名单),作用是开放这个8090端口,YMP的服务端口。测试环境建议直接关闭防火墙。
#root用户下操作
systemctl stop firewalld
systemctl disable firewalld
2.Java 11版本:YMP仅支持在JDK8或JDK11的环境下安装。
#查看java版本
java -version
3.浏览器的版本:YMP支持浏览器Google Chrome、Microsoft Edge和Firefox,建议使用当前较新的版本。
1.2.2 安装
首次安装,我是按照官方文档中默认推荐方式安装的。包括软件包准备、安装前准备和安装完成,一共几分钟,整个安装步骤非常简单。
1.准备YMP安装包、YashanDB安装包、Oracle OCI安装包。
2.解压OCI安装包
unzip instantclient-basic-linux.x64-19.19.0.0.0dbru.el9.zip
3.解压YMP安装包
unzip yashan-migrate-platform-v23.2.1.0-linux-x86-64.zip
4.使用默认内置库安装YMP并指定OCI
cd yashan-migrate-platform
sh bin/ymp.sh install --db /home/ymp/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz --path /data/ymp/client/instantclient_19_19
# --db:是yashandb的包的目录,作为内置库使用。即这种安装方式YMP安装过程中会部署一个YashanDB作为它的内置库,这个库不能做为目标库,所以还要准备另外一个YashanDB的库,用于目标端数据库源。
# --path:是我们刚才解压的OCI的目录。
5.安装完成,测试访问连接
浏览器访问http://192.168.33.176:8090/
#这里ip替换成自己的ip,端口默认是8090。默认用户密码是admin/admin
能正常访问到这个页面,代表YMP环境已经部署好了。
2.数据迁移步骤
数据迁移是以“任务”为单位去完成的。
目前YMP仅支持离线全量迁移,即在迁移的过程中,尽量保证源端数据设置成仅读模式,不然在最后数据校验阶段,可能存在源端和目标端数据不一致的情况。
整个步骤就是两大步:1.创建数据源;2.创建同步任务。同步任务中包含【创建任务】—>【迁移评估】—>【迁移配置】—>【离线迁移】—>【校验初始化】—>【一致性校验】,共6个环节。
接下来,我们详细看看每个步骤和环节的作用是什么以及具体实操动作。
2.1 第1步:数据源的准备
YMP的主要作用就是同步源端数据(目前仅支持Oracle、MySQL、DM)到目标端(目前仅支持YashanDB),所以我们需要先将数据源配置起来(包括源端和目标端)。
我准备了6个数据源,其中包括源端的Oracle 19c(19.3.0.0.0)、Oracle 11g(11.2.0.4.0)、MySQL 5.7(5.7.35)、MySQL 8.0(8.0.25),以及目标端的当前官网支持下载的两个YashanDB个人版:23.1和23.2版本。
源端和目标端的数据源添加方式没有任何差异,均是在页面上【数据源管理】->【添加数据源】界面配置,配置的时候不区分源端和目标端。只有在创建任务的时候会限制选择。
2.2 第2步:创建同步任务
2.2.1 创建任务
创建任务是一切任务的起点。详细步骤参考:创建任务。
1.关于源端数据库的选择,我们可以看到是不能选择YashanDB的。
2.关于内置库和外置库,它们的作用是一样的,都是用于作为YMP迁移数据过程中使用,比如元数据校验、迁移评估等。这里的内置库是我们在安装YMP时,YMP自动部署的那个YashanDB,默认端口是8091,和手动部署的YashanDB(默认端口1688)是不冲突的。外置库代表的是,我们自己部署了一套YashanDB,这个库也要添加到数据源中。因为我们安装步骤中,默认安装的内置库,所以这里用默认选项“内置库”就可以,不推荐大家修改。
从后台进程看YMP自建的内置库
3.关于选择评估对象,因为YMP支持常用的一些数据库对象,大家可以按需选择迁移对象。比如要做全库迁移,那就全选;比如仅做表数据库的迁移,就仅选择表即可。
4.关于其它设置,使用默认的即可
2.2.2 迁移评估
上个环节配置完成后,点击【下一步:开始评估】,就开始迁移评估,评估过程中,页面上会显示评估的进度,如下图
评估完成后,会显示评估结果,包括评估了多少对象、对象兼容和不兼容的情况、PL/SQL的情况、迁移的数据量以及预估要迁移的时间等。
这里要注意一点,只有当兼容度达成100%,才能开启下一步的迁移配置。
这里要注意一点,只有当兼容度达成100%,才能开启下一步的迁移配置。
这里要注意一点,只有当兼容度达成100%,才能开启下一步的迁移配置。
如果遇到不兼容的情况,有两种方式解决:
1.在“对象详情”中,筛选不兼容的对象,忽略掉
2.在“对象详情”中,筛选不兼容的对象,手动修改语句,直到兼容
一般如果是测试环境,如果想快速体验后面的功能,可以选择忽略,如果是真实的业务数据迁移需求,要根据实际情况评估选择忽略或者修改。
我这里是测试环境,就选择了忽略。
忽略之后,要重新刷报告,针对忽略的情况,再重新评估一次。
此时可以看到,兼容度达到100%了,我们可以开启下一步的迁移配置了。
2.2.3 迁移配置
这个环节主要是配置目标端数据库的信息以及YMP会做一个预检查,比如表空间的检查、版本是否一致、权限够不够等,就是把迁移中的风险评估提前做了,后面就可以顺利迁移。
我们可以看到,目标端的数据库只能是YashanDB。
我的测试环境报了两个问题:
- 版本检查未通过是指:我内置库的版本是23.2,而目标库我选择的是23.1,这里我们是要求内置库和目标库的YashanDB版本必须要保持一致的。也可以理解,因为YMP内置库的作用就是为了做兼容性评估,如果目标库版本和内置库版本不一致,这里就会有版本特性不一致的风险,导致评估结果不准确。
- 表空间检查是指:数据依赖底层的表空间存储介质,而YMP做的是逻辑数据的同步,并不会同步表空间的信息,所以我们要提前把对应的表空间给创建好。
接下来把目标库选择23.2,以及把相关的表空间建好,再次检查,就可以通过了。
也会有一些告警项,可以忽略。
2.2.4 离线迁移
这一环节,就是真正的在同步数据了,界面上可以观察到数据的同步进度以及一个性能监控信息。
迁移完成之后,会生成任务日志和迁移报告,如果我们在迁移过程中报错了或者迁移失败了,可以通过这两个部分来定位问题。
2.2.5 校验初始化
迁移完成之后,可以做一个一致性的校验,这里的校验初始化,是指可以自定义的配置一些要校验的对象。因为校验也会有性能和资源的开销,虽然做了全库的迁移,但是有可能只想检验一下表数据的情况,甚至可以选择仅校验表的行数是否一致。这个环节就可以自定义校验项了。
我选择的是默认的校验情况。下一步就开始一致性校验。
2.2.6 一致性校验
校验完成之后,也会有一个校验报告,可以用来分析源端和目标端不一致的情况。
到这个环节,整个迁移任务就顺利完成了。
4.整体感受
整个迁移步骤比较简单,但是还是有一定的技术门槛。至少需要了解数据库的一些功能特性、遇到问题分析问题的手段和数据库经验等。
从三个维度来分享我的整个迁移感受:
- 官方文档:文档的描述比较简单,常见问题涵盖面比较少,建议可以补充一些常见问题项
- 产品体验:整个产品使用比较简单,界面操作简洁明确,思路也很清晰,感觉不错
- 原厂支持:在测试的过程中也遇到到在技术交流群的咨询,原厂的响应和问题解答响应都很及时,体验不错