「YashanDB迁移体验官」Mysql生产环境迁移至YashanDB数据库深度体验

news2024/11/16 0:25:44

「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的总体架构如下:
image.png

1.3 产品规格

1.3.1 数据库版本支持

image.png

1.3.2 数据类型支持

image.png

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.6Mysql5.7.44xx.xx.xx.xx115.1G
目标端rhel7.6YashanDB23.2.1.100xx.xx.xx.xx
YMP工具rhel7.623.2.1.0xx.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登录界面

image.png

2.3.2 YMP迁移流程

YMP迁移流程如下图所示,主要包含创建任务、迁移评估、迁移配置、离线迁移、数据初始化和一致性校验这6个流程。

image.png

3. YMP数据迁移

注: 由于本次迁移采用的是正式环境数据,所以下列内容关于正式数据的用户名和表名等都做了打码和脱敏。

3.1 创建数据源

1715701534481.jpg

3.2 创建任务

image.png

3.3 迁移评估

image.png

3.4 迁移配置

image.png

3.5 离线迁移

image.png

3.6 校验初始化

image.png

3.7 一致性校验

image.png

4. YMP迁移问题记录

本章记录YMP实际迁移中遇到的问题,部分问题由于数据保密要求不做展示,故提供问题复现测试用例供参考。

4.1 YMP使用注意点

4.1.1 多个迁移任务中不能有同名的schema

问题现象: 新建迁移任务提示被XX迁移任务评估占用。

image.png

原因分析: 新建的迁移任务与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 迁移评估需要完全兼容才能进行下一步

问题现象:【迁移评估】流程执行后,存在部分不兼容对象,无法进行下一步操作。

image.png

原因分析: YMP设定的逻辑是兼容达到100%,才能进行下一步操作。

解决方案: 根据实际情况进行不兼容对象处理,可以在线改造SQL或者忽略该不兼容对象后,完成后执行【刷新报告】,兼容度达到100%后可以进行下一步操作。

4.1.3 迁移评估不兼容的对象仅支持在线修改

问题现象: 不兼容SQL提示表不存在,改造SQL后在YMP内置库执行创建表操作,【刷新报告】之后还是提示表不存在。

image.png

image.png

image.png

原因分析: 【迁移评估】中不兼容的对象,不支持直接在内置库中进行直接修改后跳过不兼容错误。在“刷新报告”之后,手动新增的内置库内容会自动被删除掉。

解决方案: YMP平台上在线更新不兼容对象的SQL语句后,执行【验证并保存】操作。

image.png

4.1.5 YMP内置库版本必须大于或等于目标端数据库版本

image.png

4.1.6 数据迁移失败不支持手动修复状态

问题现象: 【离线迁移】流程中针对部分数据迁移失败的数据,无法手动修复状态。

image.png

原因分析: YMP暂不支持手动修复数据迁移失败的状态。

解决方案: 查看迁移失败问题详情后,在内置库处理对应失败问题,执行【迁移重试】后完成迁移。

image.png
image.png
image.png
image.png

4.2 YMP迁移兼容问题

4.2.1 auto_increment替换问题

问题现象: YashanDB建表语句中使用auto_increment关键字执行失败。
image.png

原因分析: 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工具迁移过程中出现字符长度超出。
image.png

原因分析: 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改造过程中,执行建表语句遇到关键字冲突问题。
image.png

原因分析: 建表过程中有个字段名为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"报错。
image.png

原因分析: MYSQL数据库支持简写的字面量查询方式,YashanDB数据库需要使用DUAL伪表做查询。

解决方案: 使用DUAL做伪表即可规避。
image.png

4.2.5 索引键长度超过上限

问题现象: YMP迁移评估不兼容对象提示索引字符长度超出。
image.png

原因分析: 查看组合索引的3个字段长度,(500CHAR+500CHAR+500CHAR)*4=6000bytes,刚好等于6000bytes的上限。

解决方案: 根据实际情况调整组合索引字段长度。

image.png

SQL> alter table table_name modify column_name varchar (N CHAR);

image.png

4.2.6 纯数字的字段名转换报错

问题现象: YMP元数据迁移过程中出现纯数字的字段名无法设置非空约束报错。
image.png

原因分析: YMP针对这种特殊字段名无法直接做转换。

解决方案: 将纯数字的字段名加上双引号后,执行【验证并保存】可规避。
image.png

4.2.7 GIS数据类型暂不支持转换

问题现象: YMP元数据迁移过程中空间数据类型的表无法正常转换。
image.png

原因分析: YMP暂不支持自动转换空间数据类型。

解决方案: YashanDB具备GIS能力,可以用ST_GEOMETRY类型进行兼容。
image.png

4.2.8 空格字符迁移遇到NULL问题

问题现象: YashanDB数据库非空约束插入空字符会出现报错。
image.png

原因分析: Mysql非空约束允许插入空字符,但是YashanDB不支持,因此会出现报错。

解决方案: 先删除表的非空约束,把数据导入完成。

image.png

4.2.9 字段重复索引问题

问题现象: YMP元数据迁移过程中提示字段重复索引问题。
image.png

原因分析: MYSQL支持在主键索引列再创建普通索引。YashanDB不支持该功能。

解决方案: 暂时先忽略该索引,观察迁移到YashanDB后的SQL执行计划和效率,再根据实际情况创建索引。

5.迁移小结

  1. YMP迁移工具部署简单,操作界面简洁美观,操作流程清晰明了,小白也可以轻松上手;
  2. 迁移过程透明化,从评估到迁移整个流程都提供了详细的报告供下载;
  3. 产品功能上还存在优化空间,地理空间类型迁移能力也较薄弱;
  4. YMP目前仅支持全量迁移,暂不支持在线迁移或实时同步等功能;
  5. 总体而言,YMP的迁移体验还是蛮不错的。优秀的产品总是在各式各样的应用场景不断迭代后诞生,希望YMP产品能够不断优化迭代,做的越来越好!YashanDB加油!国产数据库加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1698269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创新实训2024.05.26日志:落地基于硬盘的数据库服务

1. 需求任务列表 以下描述易学大模型软件的web应用的功能。 用户注册 用户邮箱,密码,验证码开启官方邮箱,用来发验证码(QQ 网易都支持开启smtp协议,找教程,用邮箱不用手机号是为了省买发短信云服务的钱&a…

初识C语言——第二十四天

函数的基本使用和递归 1.函数是什么 2.库函数 3.自定义函数 4.函数参数 5.函数调用 6.函数的嵌套调用和链式访问 7.函数的声明和定义 函数是什么 C语言中函数的分类 1.库函数 2.自定义函数 库函数: 简单的总结,C语言常用的库函数都有: #includ…

关于数据库和数据表的基础SQL

目录 一. 数据库的基础SQL 1. 创建数据库 2. 查看当前有哪些数据库 3. 选中数据库 4. 删除数据库 5. 小结 二. 数据表的基础SQL 1. 创建数据表 2. 查看当前数据库中有哪些表 3. 查看指定表的详细情况(查看表的结构) 4. 删除表 5. 小结 一. 数据库的基础SQL 1. 创建…

YOLOv10 | 手把手教你利用yolov10训练自己数据集(含环境搭建 + 参数解析 + 数据集查找 + 模型训练、推理、导出)

一、前言 本文内含YOLOv10网络结构图 各个创新模块手撕结构图 训练教程 推理教程 参数解析 环境搭建 数据集获取等一些有关YOLOv10的内容! 目录 一、 前言 二、整体网络结构图 三、空间-通道分离下采样 3.1 SCDown介绍 3.2 C2fUIB介绍 3.3 PSA介绍 …

【QT八股文】系列之篇章3 | QT的多线程以及QThread与QObject

【QT八股文】系列之篇章3 | QT的多线程 前言4. 多线程为什么需要使用线程池线程池的基础知识python中创建线程池的方法使用threading库队列Queue来实现线程池使用threadpool模块,这是个python的第三方模块,支持python2和python3 QThread的定义QT多线程知…

【kubernetes】探索k8s集群中金丝雀发布后续 + 声明式资源管理yaml

目录 一、K8S常见的发布方式 1.1蓝绿发布 1.2灰度发布(金丝雀发布) 1.3滚动发布 二、金丝雀发布 三、声明式管理方法 3.1YAML 语法格式 3.1.1查看 api 资源版本标签 3.1.2查看资源简写 3.2YAML文件详解 3.2.1Deployment.yaml 3.2.2Pod.yaml …

数据结构(五)

数据结构(五) 常见的排序算法内部排序交换插入选择归并基数 外部排序基于归并的 常见的排序算法 内部排序 交换 冒泡:每一次运行总会将最小的或者最大的放到前面,如果需要交换,一直在交换 快速排序*:经过…

《C++ Primer Plus》第十一章复习题和编程练习

这里写目录标题 一、复习题二、编程练习 一、复习题 1. 使用成员函数为Stonewt类重载乘法运算符,该运算符将数据成员与double类型的值相乘。注意,当用英石和磅表示时,需要进位。也就是说,将10英石8磅乘以2等于21英石2磅。 答&am…

Python语言基础学习(下)

目录 一、顺序语句 二、条件语句 (1) if (2) if - else (3) if - elif - else 缩进和代码块 空语句 pass 三、循环语句 while 循环 for 循环 continue break 四、函数 创建函数 调用函数 函数返回 函数变量 函数递归 关键字参数 五、列表和元组 创建列表 …

创新实训2024.05.25日志:Web应用技术选型

我们的web应用使用python web的fastapi框架,通过uvicorn开启web服务。 1. refs 官网文档:FastAPI (tiangolo.com) github:https://github.com/tiangolo/fastapi 2. 环境配置 python:3.11 uvicorn:0.29.0 pip install "uvicorn[stan…

【启程Golang之旅】基本变量与类型讲解

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

嵌入式全栈开发学习笔记---C语言笔试复习大全25(实现学生管理系统)

目录 实现学生管理系统 第一步:结构体声明 第二步:重命名结构体 第三步:限定可以存储的最大学生数目 第四步:定义结构体指针数组和定义一个整型变量存放当前的人数 第五步:设计欢迎界面 第六步:设计…

【设计模式】JAVA Design Patterns——Command(事务模式)

🔍目的 将请求封装为对象,从而使你可以将具有不同请求的客户端参数化,队列或记录请求,并且支持可撤销操作。 🔍解释 真实世界例子 有一个巫师在地精上施放咒语。咒语在地精上一一执行。第一个咒语使地精缩小&#xff0…

从关键新闻和最新技术看AI行业发展(2024.5.6-5.19第二十三期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议,一起交流学习💪 欢迎大家关注Rocky的公众号&…

C++之std::is_trivially_copyable(平凡可复制类型检测)

目录 1.C基础回顾 1.1.平凡类型 1.2.平凡可复制类型 1.3.标准布局类型 2.std::is_trivially_copyable 2.1.定义 2.2.使用 2.3.总结 1.C基础回顾 在C11中,平凡类型(Trivial Type)、平凡可复制类型(TrivialCopyable&#x…

深入理解与防御跨站脚本攻击(XSS):从搭建实验环境到实战演练的全面教程

跨站脚本攻击(XSS)是一种常见的网络攻击手段,它允许攻击者在受害者的浏览器中执行恶意脚本。以下是一个XSS攻击的实操教程,包括搭建实验环境、编写测试程序代码、挖掘和攻击XSS漏洞的步骤。 搭建实验环境 1. 安装DVWA&#xff…

8.什么是HOOK

程序编译的本质是,首先计算机它只能看得懂机器码也就是只能看得懂数字,机器码学起来很费劲然后就创造了编译器这个东西,编译器它懂机器语言所以它可以跟机器沟通,而我们人可以跟编译器沟通,人跟编译器的语言就是各种各…

GBDT、XGBoost、LightGBM算法详解

文章目录 一、GBDT (Gradient Boosting Decision Tree) 梯度提升决策树1.1 回归树1.2 梯度提升树1.3 Shrinkage1.4 调参1.5 GBDT的适用范围1.6 优缺点 二、XGBoost (eXtreme Gradient Boosting)2.1 损失函数2.2 正则项2.3 打分函数计算2.4 分裂节点2.5 算法过程2.6 参数详解2.7…

不拍视频,不直播怎么在视频号卖货赚钱?开一个它就好了!

大家好,我是电商糖果 视频号这两年看着抖音卖货的热度越来越高,也想挤进电商圈。 于是它模仿抖音推出了自己的电商平台——视频号小店。 只要商家入驻视频号小店,就可以在视频号售卖商品。 具体怎么操作呢,需要拍视频&#xf…

leedcode【142】. 环形链表 II——Java解法

Problem: 142. 环形链表 II 思路解题方法复杂度Code性能 思路 1.用快慢指针找到相遇的点(快指针一次走一步,慢指针一次走两步) 2.一个指针从head开始,一个指针从相遇点开始,一次一步,相遇处即为环入口 解题…