透過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社群助手
微信好友,傳送驗證資訊加群
。