「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的总体架构如下:
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.mzph.cn/diannao/13679.shtml

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

相关文章

离线模式下载安装gcc-4.8.5

目录 一,下载gcc离线安装包 二,下载gcc依赖包 三,安装gcc 1, 解压 2, 将依赖库放置环境 3, 安装 3.1自动安装 3.1.1 执行依赖库的编译 3.1.2 新建编译目录 3.1.3 配置编译环境 3.1.4 编译 3.1.5 安装 3.2 手动安装 3.2.1 安装GMP-4.3.2 3.2.2 安装mpf…

【pytorch】 Win11下cuda,cudnn以及pytorch环境安装

Win11下cuda,cudnn以及pytorch环境安装 CUDA环境安装1. 查看CUDA版本1.1 打开NVIDIA控制面板,可以点右下角的NVIDIA设置1.2 点击系统信息,选择组件查看CUDA版本 2. 下载对应的CUDA版本3. 安装3.1 启动exe文件安装 4. 验证安装结果 CUDNN 环境…

【MySQL精通之路】InnoDB-启动选项和系统变量

系统变量可以在服务器启动时设置TRUE或FALSE启用禁用,也可以通过使用--skip前缀来禁用 例如: 要启用或禁用InnoDB自适应哈希索引,可以在命令行中使用--skip-innodb-adaptive-hash-index或--innodb-adaptive-hash-index,或者在配置…

JavaSE : 注解 Annotation

注解 Java中的注解(Annotation)是一种元数据形式,用于向编译器或JVM提供有关程序元素(如类、方法、变量、参数和包)的附加信息。注解不会直接影响程序的行为或结构,但它们可以被编译器、开发工具或运行时环…

Apache CXF Aegis databinding SSRF 高危漏洞修复

一、漏洞修复 Apache CXF Aegis databinding SSRF漏洞 Spring Web UriComponentsBuilder URL解析不当漏洞 二、修复步骤 1、Apache CXF Aegis databinding SSRF漏洞修复 步骤: 进入服务器搜索 databinding find -name *databinding* 发现版本是3.1.6 果断…

数据结构~~带环链表的环开始的节点位置**两种方法

1.带环链表环开始的位置 (1)上面的这个测试用例使用的是包含了4个节点的带环链表,我们要找的就是链表里面的环开始的节点的位置,拿这个测试用例而言,就是2这个节点,从这个节点开始,我们的链表就…

【第16章】MyBatis-Spring之SqlSession

文章目录 前言一、SqlSessionTemplate1. 创建2. 使用3. 批量操作3.1 创建SqlSessionTemplate3.2 service3.3 controller 二、SqlSessionDaoSupport总结 前言 在 MyBatis 中,你可以使用 SqlSessionFactory 来创建 SqlSession。 一旦你获得一个 session 之后&#xf…

源码部署EFK

目录 资源列表 基础环境 关闭防护墙 关闭内核安全机制 修改主机名 添加hosts映射 一、部署elasticsearch 修改limit限制 部署elasticsearch 修改配置文件 单节点 集群(3台节点集群为例) 启动 二、部署filebeat 部署filebeat 添加配置文件 启动 三、部署kiban…

单点登录【demo】

前言 2023-07-29 15:44:56 公开发布于 2024-5-22 00:04:56 单点登录【demo】 以下是 Java 实现单点登录的示例代码: 单点登录(Single Sign-On,SSO)是一种身份认证和授权机制,可以使用户在多个应用程序或系统之间使…

SQL常用基础语句(一)-- FGHIJ开头

GROUP BY GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。在GROUP BY子句后面包含了一个HAVING子句,HAVING类似于WHERE,(唯一的差别是WHERE过滤行,HAVING过滤组&#xff0…

【C/C++笔试练习】TCP、IP广播、ARP协议、IP路由器、MAC协议、三次握手、TCP/IP、子网划分年、会抽奖、抄送列表

文章目录 C/C笔试练习选择部分(1)TCP(2)IP广播(3)ARP协议(4)IP路由器(5)MAC协议(6)三次握手(7)TCP/IP&#xf…

PHP在线制作表白网源码

PHP在线制作表白网源码,送女友个惊喜吧,无数据库,上传就能用,后台/admin,账号密码都是admin 百度网盘:https://pan.baidu.com/s/1rbD2_8IsP9UPLK-cdgEXfA?pwdre59

AWS安全性身份和合规性之Secrets Manager

AWS Secrets Manager是一项AWS托管的服务,用于安全地存储、管理和轮转敏感信息,如数据库密码、API密钥、OAuth令牌等。AWS Secrets Manager助您在整个生命周期内轻松管理、检索和轮换数据库凭证、API密钥和其他密钥。 关键词:集中管理、加密…

sql使用加和进行合并去重并提升速率

背景 有三张表ltd1 、ltd0051和、ltd0011ltd1作为主表,左关联 ltd0051和ltd0011如果ltd0051有两条重复数据、td0011有两条重复数据,左关联之后就会得到4条,同时ltd0051和ltd0011这两条数据都是正确,基于主键我们需要将两个相同主键…

【全开源】AJAX家政上门服务系统小程序自营+多商家(高级授权)+独立端

基于FastAdmin和原生微信小程序开发的一款同城预约、上门服务、到店核销家政系统,用户端、服务端(高级授权)、门店端(高级授权)各端相互依赖又相互独立,支持选择项目、选择服务人员、选择门店多种下单方式,支持上门服务和到店核销两种服务方式…

深入理解数仓开发(一)数据技术篇之日志采集

前言 今天开始重新回顾电商数仓项目,结合《阿里巴巴大数据之路》和尚硅谷的《剑指大数据——企业级电商数据仓库项目实战 精华版》来进行第二次深入理解学习。之前第一次学习数仓,虽然尽量放慢速度力求深入理解,但是不可能一遍掌握&#xff0…

我在去哪儿薅到了5块钱火车票代金券,速薅

哈哈,亲爱的薅羊毛小伙伴们! 刚刚在去哪儿大佬那儿发现了一个超级薅羊毛福利!我只花了短短两分钟,就搞到了一张5块钱火车票代金券,简直是天上掉馅饼的节奏啊! 话不多说,薅羊毛的姿势给你们摆好…

代码随想录算法训练营第十六天(py)| 二叉树 | 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

104.二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 思路1 迭代法 层序遍历 层序遍历的思路很简单,其结果本来就是按层数记录的,只需返回结果的长度皆可。…

【C语言回顾】联合和枚举

前言1. 联合体1.1 联合体的声明1.2 联合体的特点1.3 联合体的使用 2. 枚举2.1 枚举的声明2.2 枚举的特点2.3 枚举的使用 结语 #include<GUIQU.h> int main { 上期回顾: 【C语言回顾】结构体 个人主页&#xff1a;C_GUIQU 专栏&#xff1a;【C语言学习】 return 一键三连;…

解决法律条文的录入前判断发条冲突的需求;怎么选择NLPModel?怎么使用模型?

要在NLPModel类中实现法律条文的冲突检测功能&#xff0c;可以使用BERT模型来计算句子相似度。以下是详细的步骤&#xff0c;包括如何选择模型、训练模型以及使用模型。 选择NLP模型 根据你的需求&#xff0c;BERT&#xff08;Bidirectional Encoder Representations from Tra…