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

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下边

```shell

## 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。

```shell

## 登录YMP内置库查询用户情况,发现新建的迁移任务中迁移的schema名与内置库中的schema重叠了

$ yasql sys/ymppw602.@xx.xx.xx.xx:8091

SQL> select username, created from dba_users order by 2;

```

**解决方案:** 删除原有的已经完成的迁移任务,再新建新的迁移任务。

4.1.2 迁移评估需要完全兼容才能进行下一步

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

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

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

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

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

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

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

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

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

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

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

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

4.2 YMP迁移兼容问题

4.2.1 auto_increment替换问题

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

**原因分析:** YashanDB不支持auto_increment自增语法。

**解决方案:** YashanDB创建SEQUENCE的方式来兼容MYSQL的auto_increment语法。

**问题复现:**

```shell

## 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语法。

**问题复现:**

```shell

## 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的保留字,所以报错了。

**解决方案:** 将该字段名用双引号引起来可以规避。

**问题复现:**

```sql

-- 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

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.迁移小结

1. YMP迁移工具部署简单,操作界面简洁美观,操作流程清晰明了,小白也可以轻松上手;

2. 迁移过程透明化,从评估到迁移整个流程都提供了详细的报告供下载;

3. 产品功能上还存在优化空间,地理空间类型迁移能力也较薄弱;

4. YMP目前仅支持全量迁移,暂不支持在线迁移或实时同步等功能;

5. 总体而言,YMP的迁移体验还是蛮不错的。优秀的产品总是在各式各样的应用场景不断迭代后诞生,希望YMP产品能够不断优化迭代,做的越来越好!YashanDB加油!国产数据库加油!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容