「YashanDB迁移体验官」Mysql生产环境迁移至YashanDB数据库深度体验
「YashanDB迁移体验官」Mysql生产环境迁移至YashanDB数据库深度体验
- 1. 前言
- 1.1 产品介绍
- 1.2 产品架构
- 1.3 产品规格
- 1.3.1 数据库版本支持
- 1.3.2 数据类型支持
- 2. YMP安装
- 2.1 环境说明
- 2.2 执行安装
- 2.3 访问YMP
- 2.3.1 YMP登录界面
- 2.3.2 YMP迁移流程
- 3. YMP数据迁移
- 3.1 创建数据源
- 3.2 创建任务
- 3.3 迁移评估
- 3.4 迁移配置
- 3.5 离线迁移
- 3.6 校验初始化
- 3.7 一致性校验
- 4. YMP迁移问题记录
- 4.1 YMP使用注意点
- 4.1.1 多个迁移任务中不能有同名的schema
- 4.1.2 迁移评估需要完全兼容才能进行下一步
- 4.1.3 迁移评估不兼容的对象仅支持在线修改
- 4.1.5 YMP内置库版本必须大于或等于目标端数据库版本
- 4.1.6 数据迁移失败不支持手动修复状态
- 4.2 YMP迁移兼容问题
- 4.2.1 auto_increment替换问题
- 4.2.2 varchar字符类型单位问题
- 4.2.3 数据库保留字问题
- 4.2.4 字面量查询问题
- 4.2.5 索引键长度超过上限
- 4.2.6 纯数字的字段名转换报错
- 4.2.7 GIS数据类型暂不支持转换
- 4.2.8 空格字符迁移遇到NULL问题
- 4.2.9 字段重复索引问题
- 5.迁移小结
1. 前言
作为崖山数据库产品发布的第一批体验体验官,有幸被邀请参与崖山迁移平台(YashanDB Migration Platform,YMP)产品的体验活动,所以有了今天的这篇文章。
本次迁移计划将Mysql数据迁移到YashanDB数据库中,并在迁移过程中遇到的问题及其对产品的体验输出自己的使用感受和产品建议,也希望国产数据库能做得越来越棒!
1.1 产品介绍
崖山迁移平台(YashanDB Migration Platform,下文以YMP代称)是YashanDB提供的数据库迁移产品,支持异构RDBMS与YashanDB之间进行迁移评估、离线迁移、数据校验的能力。 YMP提供可视化服务,用户只需通过简单的界面操作,即可完成从评估到迁移整个流程的执行与监控,实现低门槛、低成本、高效率的异构数据库迁移。
YMP是一款具备【精准评估】、【SQL自动转换】、【评估迁移无缝对接】、【对象一键迁移】、【数据高i性能迁移】、【数据校验】、【一站式服务】这7个核心特性的工具,能够解决迁移兼容性与工作量评估、异构数据库元数据迁移以及数据快速迁移的问题。
1.2 产品架构
YMP的总体架构如下:
1.3 产品规格
1.3.1 数据库版本支持
1.3.2 数据类型支持
2. YMP安装
YMP工具官方提供的部署文档如下:
https://doc.yashandb.com/ymp/23.2/zh/%E5%AE%89%E8%A3%85%E5%8D%87%E7%BA%A7/%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html
YMP工具部署的步骤简单,需要关注的是YMP工具的业务存储库选择问题。
目前YMP支持默认内置库和自定义内置库两种接入方式:
默认内置库:安装YMP工具时默认安装YashanDB作为内置库;
自定义内置库:使用外部的YashanDB数据库作为YMP的业务库使用。
2.1 环境说明
类型 | 系统版本 | 数据库 | 数据库版本 | 地址 | 迁移数据量 |
---|---|---|---|---|---|
源端 | rhel7.6 | Mysql | 5.7.44 | xx.xx.xx.xx | 115.1G |
目标端 | rhel7.6 | YashanDB | 23.2.1.100 | xx.xx.xx.xx | |
YMP工具 | rhel7.6 | 23.2.1.0 | xx.xx.xx.xx |
2.2 执行安装
下载连接:https://download.yashandb.com/download
上传软件包Yashan Migration Platform 23.2.1(Linux X86)到/tmp下边
## 1. 创建安装用户
useradd ymp
echo "ymp" | passwd --stdin ymp## 2. 创建安装目录并解压安装包
$ mkdir -p /home/ymp/soft
$ unzip /tmp/yashan-migrate-platform-v23.2.1.2-linux-x86-64.zip -d /home/ymp/soft
$ cd /home/ymp/soft/yashan-migrate-platform## 3. 安装参数调整
### 3.1 配置内置库的密码和端口(注意不要与本机的其他端口重叠)
$ cat /home/ymp/soft/yashan-migrate-platform/conf/db.properties
YASDB_PASSWORD=ymppw602.
YASDB_PORT=8091
YASDB_CHARACTER_SET=UTF8### 3.2 配置YMP配置文件,注意服务端口不要重叠,内置库连接信息注意填写正确
### 注意:这里只列出YMP服务端口和内置库连接信息配置,其他优化项根据实际情况进行调整
$ cat /home/ymp/soft/yashan-migrate-platform/conf/application.properties
server.port=8080
spring.datasource.url=jdbc:yasdb://127.0.0.1:8091/yashan
spring.datasource.username=YMP_DEFAULT
spring.datasource.password=ymppw602.
spring.datasource.largePoolSize=64M
spring.datasource.cursorPoolSize=64M
...### 4. 执行安装
$ cd /home/ymp/soft/yashan-migrate-platform/
$ sh bin/ymp.sh installnodb --db /home/ymp/yashandb-23.2.1.0-linux-x86_64.tar.gz### 5. 检查安装情况
$ cd /home/ymp/soft/yashan-migrate-platform/
$ sh bin/ymp.sh status
2.3 访问YMP
浏览器访问:http://xx.xx.xx.xx/#/login,初始化用户名密码:admin/admin
2.3.1 YMP登录界面
2.3.2 YMP迁移流程
YMP迁移流程如下图所示,主要包含创建任务、迁移评估、迁移配置、离线迁移、数据初始化和一致性校验这6个流程。
3. YMP数据迁移
注: 由于本次迁移采用的是正式环境数据,所以下列内容关于正式数据的用户名和表名等都做了打码和脱敏。
3.1 创建数据源
3.2 创建任务
3.3 迁移评估
3.4 迁移配置
3.5 离线迁移
3.6 校验初始化
3.7 一致性校验
4. YMP迁移问题记录
本章记录YMP实际迁移中遇到的问题,部分问题由于数据保密要求不做展示,故提供问题复现测试用例供参考。
4.1 YMP使用注意点
4.1.1 多个迁移任务中不能有同名的schema
问题现象: 新建迁移任务提示被XX迁移任务评估占用。
原因分析: 新建的迁移任务与YMP平台现有的迁移任务中存在同名的schema。
## 登录YMP内置库查询用户情况,发现新建的迁移任务中迁移的schema名与内置库中的schema重叠了
$ yasql sys/ymppw602.@xx.xx.xx.xx:8091
SQL> select username, created from dba_users order by 2;
解决方案: 删除原有的已经完成的迁移任务,再新建新的迁移任务。
4.1.2 迁移评估需要完全兼容才能进行下一步
问题现象:【迁移评估】流程执行后,存在部分不兼容对象,无法进行下一步操作。
原因分析: YMP设定的逻辑是兼容达到100%,才能进行下一步操作。
解决方案: 根据实际情况进行不兼容对象处理,可以在线改造SQL或者忽略该不兼容对象后,完成后执行【刷新报告】,兼容度达到100%后可以进行下一步操作。
4.1.3 迁移评估不兼容的对象仅支持在线修改
问题现象: 不兼容SQL提示表不存在,改造SQL后在YMP内置库执行创建表操作,【刷新报告】之后还是提示表不存在。
原因分析: 【迁移评估】中不兼容的对象,不支持直接在内置库中进行直接修改后跳过不兼容错误。在“刷新报告”之后,手动新增的内置库内容会自动被删除掉。
解决方案: YMP平台上在线更新不兼容对象的SQL语句后,执行【验证并保存】操作。
4.1.5 YMP内置库版本必须大于或等于目标端数据库版本
4.1.6 数据迁移失败不支持手动修复状态
问题现象: 【离线迁移】流程中针对部分数据迁移失败的数据,无法手动修复状态。
原因分析: YMP暂不支持手动修复数据迁移失败的状态。
解决方案: 查看迁移失败问题详情后,在内置库处理对应失败问题,执行【迁移重试】后完成迁移。
4.2 YMP迁移兼容问题
4.2.1 auto_increment替换问题
问题现象: YashanDB建表语句中使用auto_increment关键字执行失败。
原因分析: YashanDB不支持auto_increment自增语法。
解决方案: YashanDB创建SEQUENCE的方式来兼容MYSQL的auto_increment语法。
问题复现:
## Mysql源端建表:
mysql> CREATE TABLE `T1` (`id` bigint(20) NOT NULL AUTO_INCREMENT);## YashanDB目标端建表:
SQL> CREATE TABLE T1 ("ID" bigint NOT NULL AUTO_INCREMENT);
[1:39]YAS-04209 unexpected word AUTO_INCREMENT## YashanDB目标端改造兼容
SQL> CREATE SEQUENCE T1_ID_SEQ;
SQL> CREATE TABLE T1 ("ID" bigint NOT NULL DEFAULT T1_ID_SEQ.NEXTVAL);
4.2.2 varchar字符类型单位问题
问题现象: YMP工具迁移过程中出现字符长度超出。
原因分析: YashanDB的varchar数据类型单位默认是byte
解决方案: 使用varchar(N char)的方式来兼容MYSQL varchar语法。
问题复现:
## Mysql源端建表和插数据:
mysql> CREATE TABLE `T2`(`record` varchar(2));
Query OK, 0 rows affected (0.10 sec)
mysql> INSERT INTO T2 VALUES ('记录');
Query OK, 1 row affected (0.02 sec)## YashanDB目标端建表和插数据:
SQL> CREATE TABLE T2 (RECORD VARCHAR(2));
Succeed.
SQL> INSERT INTO T2 VALUES('记录');
YAS-04008 RECORD size exceeding limit 2## YashanDB目标端改造:
SQL> ALTER TABLE T2 MODIFY RECORD VARCHAR(2 CHAR);
SQL> INSERT INTO T3 VALUES('记录');
1 row affected.
4.2.3 数据库保留字问题
问题现象: 不兼容SQL改造过程中,执行建表语句遇到关键字冲突问题。
原因分析: 建表过程中有个字段名为LEVEL,是YashanDB的保留字,所以报错了。
解决方案: 将该字段名用双引号引起来可以规避。
问题复现:
-- YashanDB目标端创建表:
SQL> create table t4 (LEVEL varchar(10));
[1:18]YAS-04110 invalid variant name-- YashanDB目标端改造:
SQL> create table t4 ("LEVEL" varchar(10));
Succeed.
4.2.4 字面量查询问题
问题现象: YMP迁移过程中不兼容语句提示“implict table"报错。
原因分析: MYSQL数据库支持简写的字面量查询方式,YashanDB数据库需要使用DUAL伪表做查询。
解决方案: 使用DUAL做伪表即可规避。
4.2.5 索引键长度超过上限
问题现象: YMP迁移评估不兼容对象提示索引字符长度超出。
原因分析: 查看组合索引的3个字段长度,(500CHAR+500CHAR+500CHAR)*4=6000bytes,刚好等于6000bytes的上限。
解决方案: 根据实际情况调整组合索引字段长度。
SQL> alter table table_name modify column_name varchar (N CHAR);
4.2.6 纯数字的字段名转换报错
问题现象: YMP元数据迁移过程中出现纯数字的字段名无法设置非空约束报错。
原因分析: YMP针对这种特殊字段名无法直接做转换。
解决方案: 将纯数字的字段名加上双引号后,执行【验证并保存】可规避。
4.2.7 GIS数据类型暂不支持转换
问题现象: YMP元数据迁移过程中空间数据类型的表无法正常转换。
原因分析: YMP暂不支持自动转换空间数据类型。
解决方案: YashanDB具备GIS能力,可以用ST_GEOMETRY类型进行兼容。
4.2.8 空格字符迁移遇到NULL问题
问题现象: YashanDB数据库非空约束插入空字符会出现报错。
原因分析: Mysql非空约束允许插入空字符,但是YashanDB不支持,因此会出现报错。
解决方案: 先删除表的非空约束,把数据导入完成。
4.2.9 字段重复索引问题
问题现象: YMP元数据迁移过程中提示字段重复索引问题。
原因分析: MYSQL支持在主键索引列再创建普通索引。YashanDB不支持该功能。
解决方案: 暂时先忽略该索引,观察迁移到YashanDB后的SQL执行计划和效率,再根据实际情况创建索引。
5.迁移小结
- YMP迁移工具部署简单,操作界面简洁美观,操作流程清晰明了,小白也可以轻松上手;
- 迁移过程透明化,从评估到迁移整个流程都提供了详细的报告供下载;
- 产品功能上还存在优化空间,地理空间类型迁移能力也较薄弱;
- YMP目前仅支持全量迁移,暂不支持在线迁移或实时同步等功能;
- 总体而言,YMP的迁移体验还是蛮不错的。优秀的产品总是在各式各样的应用场景不断迭代后诞生,希望YMP产品能够不断优化迭代,做的越来越好!YashanDB加油!国产数据库加油!
相关文章:

「YashanDB迁移体验官」Mysql生产环境迁移至YashanDB数据库深度体验
「YashanDB迁移体验官」Mysql生产环境迁移至YashanDB数据库深度体验 1. 前言1.1 产品介绍1.2 产品架构1.3 产品规格1.3.1 数据库版本支持1.3.2 数据类型支持 2. YMP安装2.1 环境说明2.2 执行安装2.3 访问YMP2.3.1 YMP登录界面2.3.2 YMP迁移流程 3. YMP数据迁移3.1 创建数据源3.…...
qmt量化交易策略小白学习笔记第4期【qmt如何获取获取行情数据--内置python使用方法】
内置python使用方法 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 感谢关注,需免费开通量化回测与咨询实盘权限,可以和博主联系! 获取历史行情与实时行情…...

XXE(XML外部实体注入)
1、XXE原理 XXE(XML外部实体注入,XML External Entity) ,在应用程序解析XML输入时,当允许引用外部实体时,可构造恶意内容,导致读取任意文件、探测内网端口、攻击内网网站、发起DoS拒绝服务攻击、执行系统命…...
kafka 案例
kafka 案例 目录概述需求: 设计思路实现思路分析1.kafka案例_API 带回调函数的生产者2.kafka案例_API生产者分区策略测试3.kafka案例_自定义分区的生产者4.kafka案例_API同步发送生产者5.kafka案例_API简单消费者5.kafka案例_API消费者重置offset 参考资料和推荐阅读…...

别被“涨价“带跑,性价比才是消费真理
文章来源:全食在线 “再不好好赚钱,连方便面也吃不起了。”这是昨天在热搜下,一位网友的留言。而热搜的内容,正是康师傅方便面即将涨价的消息。 01 传闻初现 昨天上午,朋友圈就有人放出康师傅方便面要涨价的消息&am…...
GEE深度学习——使用Tensorflow进行神经网络DNN土地分类
Tensorflow TensorFlow是一个开源的深度学习框架,由Google开发和维护。它提供了一个灵活的框架来构建和训练各种机器学习模型,尤其是深度神经网络模型。 TensorFlow的主要特点包括: 1. 它具有高度的灵活性,可以用于训练和部署各种类型的机器学习模型,包括分类、回归、聚…...
死锁示例(python、go)
Thread 1首先获取了资源A,然后尝试获取资源B,但此时资源B已经被Thread 2获取,因此Thread 1会一直等待。而Thread 2也类似,首先获取资源B,然后尝试获取资源A,但此时资源A已经被Thread 1获取,因此…...
Spring Cloud 面试题(五)
1. Eureka的自我保护模式是什么? Eureka的自我保护模式是一种应对网络异常的安全保护措施,旨在防止因网络分区或其他异常情况导致服务实例被错误地注销。当Eureka Server在短时间内丢失过多的客户端心跳时,会触发自我保护机制。以下是自我保…...

源码编译安装LAMP
1.LAMP介绍 LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词,具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP(…...

html5网页-浏览器中实现高德地图定位功能
介绍 HTML5是当前Web开发中最常用的技术之一,而地图应用又是其中一个非常常见的需求。高德地图是国内最受欢迎的地图服务提供商之一,他们提供了一系列的API,方便开发者在自己的网站或应用中集成地图功能。 接下来我们如何使用HTML5浏览器和高…...

C从零开始实现贪吃蛇大作战
个人主页:星纭-CSDN博客 系列文章专栏 : C语言 踏上取经路,比抵达灵山更重要!一起努力一起进步! 有关Win32API的知识点在上一篇文章: 目录 一.地图 1.控制台基本介绍 2.宽字符 1.本地化 2.类项 3.setlocale函…...
国内外相机在LabVIEW图像处理的对比
概述 本文对比国内外相机在LabVIEW进行图像处理的区别,探讨各自的特点。国内相机如大恒和海康威视,具有较高性价比和本地化支持;国外品牌如Basler和FLIR则以高性能和稳定性著称。两者在驱动兼容性、图像质量和技术支持方面各有优势。 详细对…...
第四十五天 | 322.零钱兑换
题目:322.零钱兑换 尝试解答: 1.确定dp[j]含义:装满容量为j的背包所需要放的硬币个数为dp[j]; 2.动态转移方程:dp[j] dp[j - coins[i]] 1; 3.遍历顺序:本题应该为组合类题目,不考虑装入的顺序&#x…...

3D 生成重建011-LucidDreamer 优化SDS过平滑结果的一种探索
3D 生成重建011-LucidDreamer 优化SDS过平滑结果的一种探索 文章目录 0论文工作1论文方法2 效果 0论文工作 文本到3D生成的最新进展标志着生成模型的一个重要里程碑,为在各种现实场景中创建富有想象力的3D资产打开了新的可能性。虽然最近在文本到3D生成方面的进展…...
ES6 笔记04
01 异步函数的使用 es6推出了一种按照顺序执行的异步函数的方法 async 异步函数 async异步函数可以解决promise封装异步代码,调用时一直then链式编程时比较麻烦的问题 定义异步函数: async function 函数名(){ await 表达式1或者函数的调用1 await 表达式2或者函数的调用2 ...…...

中间件-------RabbitMQ
同步和异步 异步调用 MQ MQ优势:①服务解耦 ②异步调用 ③流量削峰 结构 消息模型 RabbitMQ入门案例,实现消息发送和消息接收 生产者: public class PublisherTest {Testpublic void testSendMessage() throws IOException, TimeoutExce…...
flink Data Source数据源
flink Data Source数据源 Source 并行度 非并行:并行度只能为1 并行 基于集合的Source fromElements package com.pxj.sx.flink; import org.apache.flink.configuration.Configuration; import org.apache.flink.configuration.RestOptions; import org.ap…...
网络七层模型与云计算中的网络服务
网络七层模型,也称为OSI(Open System Interconnection)模型,是由国际标准化组织(ISO)制定的一个概念性框架,用于描述网络通信过程中信息是如何被封装、传输和解封装的。这一模型将复杂的网络通信…...

word一按空格就换行怎么办?word文本之间添加空格就换行怎么办?
如上图,无法在Connection和con之间添加空格,一按空格就会自动换行。 第一步:选中文本,打开段落。 第二步:点击中文版式,勾选允许西文在单词中间换行。 确定之后就解决一按空格就自动换行啦!...
Python 遍历字典的方法,你都掌握了吗
Python中的字典是一种非常灵活的数据结构,它允许通过键来存储和访问值。在处理字典时,经常需要遍历字典中的元素,以下是几种常见的遍历字典的方法。 1. 使用 for 循环直接遍历字典的键 字典的键是唯一的,可以直接通过 for 循环来…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...