通过MySQL Workbench 将 SQL Server 迁移到GreatSQL

通过MySQL Workbench 将 SQL Server 迁移到GreatSQL

一、概述

MySQL Workbench 提供了可以将Microsoft SQL Server的表结构和数据迁移到 GreatSQL 的功能,此次将通过MySQL Workbench将SQL Server的数据迁移到GreatSQL。

本文章只是简单演示一下单张表的迁移,如果在项目中使用请根据实际情况进行调整。

二、风险评估

1.数据类型不匹配

两种数据库系统的数据类型可能不完全兼容。在迁移过程中,需要确保数据在不同类型之间的正确转换,否则可能导致数据丢失或不准确。

下表显示了Microsoft SQL Server(源)数据类型和GreatSQL数据类型之间的映射。

Microsoft SQL Server Type GreatSQL Type Comment
INT INT
TINYINT TINYINT UNSIGNED flag set in MySQL.
SMALLINT SMALLINT
BIGINT BIGINT
BIT TINYINT(1)
FLOAT FLOAT Precision value is used for storage size in both.
REAL FLOAT
NUMERIC DECIMAL
DECIMAL DECIMAL
MONEY DECIMAL
SMALLMONEY DECIMAL
CHAR CHAR/LONGTEXT Depending on its length. MySQL Server 5.6 and higher can have CHAR columns with a length up to 255 characters. Anything larger is migrated as LONGTEXT.
NCHAR CHAR/LONGTEXT Depending on its length. MySQL Server 5.6 and higher can have VARCHAR columns with a length up to 65535 characters. Anything larger is migrated to one of the TEXT blob types. In MySQL, a character set of strings depends on the column character set instead of the data type.
VARCHAR VARCHAR/MEDIUMTEXT/LONGTEXT Depending on its length. MySQL Server 5.6 and higher can have VARCHAR columns with a length up to 65535 characters. Anything larger is migrated to one of the TEXT blob types.
NVARCHAR VARCHAR/MEDIUMTEXT/LONGTEXT Depending on its length. MySQL Server 5.6 and higher can have VARCHAR columns with a length up to 65535 characters. Anything larger is migrated to one of the TEXT blob types. In MySQL, a character set of strings depends on the column character set instead of the data type.
DATE DATE
DATETIME DATETIME
DATETIME2 DATETIME Date range in MySQL is '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'. Note: fractional second values are only stored as of MySQL Server 5.6.4 and higher.
SMALLDATETIME DATETIME
DATETIMEOFFSET DATETIME
TIME TIME
TIMESTAMP TIMESTAMP
ROWVERSION TIMESTAMP
BINARY BINARY/MEDIUMBLOB/LONGBLOB Depending on its length.
VARBINARY VARBINARY/MEDIUMBLOB/LONGBLOB Depending on its length.
TEXT VARCHAR/MEDIUMTEXT/LONGTEXT Depending on its length.
NTEXT VARCHAR/MEDIUMTEXT/LONGTEXT Depending on its length.
IMAGE TINYBLOB/MEDIUMBLOB/LONGBLOB Depending on its length.
SQL_VARIANT not migrated There is not specific support for this data type.
TABLE not migrated There is not specific support for this data type.
HIERARCHYID not migrated There is not specific support for this data type.
UNIQUEIDENTIFIER VARCHAR(64) A unique flag set in MySQL. There is not specific support for inserting unique identifier values.
SYSNAME VARCHAR(160)
XML TEXT

2.语法和功能差异

SQL Server 和 GreatSQL 在语法、数据类型、函数、存储过程等方面存在一定的差异。某些在 SQL Server 中使用的语法和功能可能在 GreatSQL 中不支持,或者需要进行修改和调整。

例如,复杂的存储过程、触发器、视图等可能需要重新编写或修改以适应GreatSQL 的语法和规则。

3.应用程序兼容性

如果有依赖于原始数据库的应用程序,迁移后可能需要对应用程序进行修改和测试,以确保其与GreatSQL 数据库正常交互。

4.数据迁移过程中的错

在数据迁移过程中,可能会出现数据丢失、损坏或不一致的情况。需要进行充分的测试和验证,以确保数据的完整性和准确性。

5.性能差异

GreatSQL 和 SQL Server 的性能特点不同。例如,索引的使用、查询优化器的工作方式等可能存在差异。迁移后需要重新评估和优化SQL,以确保在 GreatSQL 环境中获得良好的性能。

三、环境说明

1.源端Microsoft SQL Server

版本 IP 端口
Microsoft SQL Server 2017 192.168.140.60 1433

2.目标端GreatSQL

版本 IP 端口
GreatSQL-8.0.32 192.168.140.60 5000

四、数据库安装

1.安装Microsoft SQLServer环境

略,参考文档:Datax助力轻松迁移SQLServer数据至GreatSQL

2.安装GreatSQL环境

略,参考文档:二进制包安装 | GreatSQL用户手册

https://greatsql.cn/docs/8.0.32-25/4-install-guide/3-install-with-tarball.html

3.安装MySQL workbench

3.1 下载

下载地址:https://dev.mysql.com/downloads/workbench/

3.2 安装

双击安装,一直点 Next 即可

五、Microsoft SQL Server 创建测试数据

1.连接数据库

$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P'xxx'

2.创建测试数据

3> CREATE DATABASE test2024;
4> go
5> use test2024
6> go
Changed database context to 'test2024'.
1> CREATE TABLE t1 (id int,name varchar(30))
2> go
1> 
2> INSERT INTO t1 VALUES (1,'a'),(2,'b'),(3,'c')
3> go

(3 rows affected)
1> SELECT * FROM t1
2> go
id          name                          
----------- ------------------------------
          1 a                             
          2 b                             
          3 c                             

(3 rows affected)

配置数据迁移

1.启动迁移功能

双击打开MySQL workbench,点击数据迁移功能,再点击开始迁移按钮

2.配置源端/目标端

2.1 源端选择 Microsoft SQL Server

需要安装SQL Server驱动:Download Microsoft® SQL Server® 2012 Native Client - QFE from Official Microsoft Download Center

下载完成后,双击安装包点下一步即可

2.2 目标端默认为MySQL

配置完成后,点击 Next

3.获取源端schema列表

点击 Next 即可

4.选择要迁移的schema

保持默认配置即可(3个选项与目标端库表名映射有关),点击 Next

5.逆向工程

这是一个自动化的信息步骤,用于报告相关错误、常规日志信息或两者。点击 Next 进行下一步

6.选择迁移对象

可以在下面的列表选择要迁移的对象,默认是迁移第4步中选择的schema下的所有表

选择要迁移的对象,点击 Next

7.迁移

将SQL Server对象 自动转换为MySQL兼容对象,将使用默认数据类型和默认列值映射。

点击下一步即可

8.手动编辑

查看和编辑迁移对象,可以在它们被应用到目标数据库之前进行编辑

Migration Problems: 这将报告问题或显示“未找到映射问题”。

All Objects:一个对象视图,用于查看和编辑对象定义。双击一行以修改目标对象的名称。

Column Mappings:显示所有表列映射,并允许您单独查看和修复所有列类型、默认值和其他属性的映射。

9.目标端创建选项

可以选择在目标端数据库创建对象、或者生成创建SQL的脚本文件或两者都可以选择。

点击 Next 进行下一步

10.创建schema

在目标端正式创建对象

11.目标端创建结果

这里列出了生成的对象,以及错误消息(如果存在)。

也可以在此处查看和编辑迁移代码。若要进行更改,请选择一个对象,编辑查询SQL语句,然后单击“Apply”。

对每个要编辑的对象重复此过程。最后,单击“Recreate Objects”以保存结果。

12.数据传输设置

Online copy of table data to target RDBMS:此方法(默认)将数据复制到目标端数据库。

Create a batch file to copy the data at another time:数据也可以转储到一个稍后可以执行的文件中,或者用作备份。此脚本使用MySQL连接来传输数据。

Create a shell script to use native server dump and load abilities for fast migration:与执行实时在线复制的简单批处理文件不同,这会生成一个要在源主机上执行的脚本,然后生成一个Zip文件,其中包含在目标主机上本地迁移数据所需的所有数据和信息。复制并提取目标主机上生成的Zip文件,然后执行导入脚本(在目标主机上),使用LOAD data命令将数据导入MySQL。

13.批量数传输

根据上一步所选的选项,进行数据传输

14.迁移报告

数据迁移完成后,会自动生成报告,总结了整个迁移过程

七、目标端GreatSQL查询数据

登录GreatSQL查询数据

greatsql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| adm                |
| das                |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| sys_audit          |
| test2024           |
+--------------------+
8 rows in set (0.00 sec)

greatsql> SELECT * FROM test2024.t1;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
|    2 | b    |
|    3 | c    |
+------+------+
3 rows in set (0.00 sec)

总结

MySQL workbench 支持从某些特定 RDBMS产品迁移到GreatSQL(MySQL),更多功能的使用可以登录MySQL官网进行查看。


Enjoy GreatSQL 😃

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群