通过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/
![file]()
3.2 安装
双击安装,一直点 Next 即可
![file]()
五、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,点击数据迁移功能,再点击开始迁移按钮
![file]()
![file]()
2.配置源端/目标端
2.1 源端选择 Microsoft SQL Server
![file]()
需要安装SQL Server驱动:Download Microsoft® SQL Server® 2012 Native Client - QFE from Official Microsoft Download Center
下载完成后,双击安装包点下一步即可
2.2 目标端默认为MySQL
![file]()
配置完成后,点击 Next
3.获取源端schema列表
![file]()
点击 Next 即可
4.选择要迁移的schema
![file]()
保持默认配置即可(3个选项与目标端库表名映射有关),点击 Next
5.逆向工程
![file]()
这是一个自动化的信息步骤,用于报告相关错误、常规日志信息或两者。点击 Next 进行下一步
6.选择迁移对象
可以在下面的列表选择要迁移的对象,默认是迁移第4步中选择的schema下的所有表
![file]()
选择要迁移的对象,点击 Next
7.迁移
将SQL Server对象 自动转换为MySQL兼容对象,将使用默认数据类型和默认列值映射。
![file]()
点击下一步即可
8.手动编辑
查看和编辑迁移对象,可以在它们被应用到目标数据库之前进行编辑
![file]()
Migration Problems: 这将报告问题或显示"未找到映射问题"。
**All Objects:**一个对象视图,用于查看和编辑对象定义。双击一行以修改目标对象的名称。
**Column Mappings:**显示所有表列映射,并允许您单独查看和修复所有列类型、默认值和其他属性的映射。
9.目标端创建选项
可以选择在目标端数据库创建对象、或者生成创建SQL的脚本文件或两者都可以选择。
![file]()
点击 Next 进行下一步
10.创建schema
在目标端正式创建对象
![file]()
11.目标端创建结果
![file]()
这里列出了生成的对象,以及错误消息(如果存在)。
也可以在此处查看和编辑迁移代码。若要进行更改,请选择一个对象,编辑查询SQL语句,然后单击"Apply"。
对每个要编辑的对象重复此过程。最后,单击"Recreate Objects"以保存结果。
12.数据传输设置
![file]()
**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.批量数传输
![file]()
根据上一步所选的选项,进行数据传输
14.迁移报告
数据迁移完成后,会自动生成报告,总结了整个迁移过程
![file]()
七、目标端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社区:
![image]()
社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html
社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html
(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)
技术交流群:
微信&QQ群:
QQ群:533341697
微信群:添加GreatSQL社区助手(微信号:wanlidbc )好友,待社区助手拉您进群。