「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的總體架構如下:
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下邊
## 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。
## 登錄YMP內置庫查詢用戶情況,發現新建的遷移任務中遷移的schema名與內置庫中的schema重疊了
$ yasql sys/ymppw602.@xx.xx.xx.xx:8091
SQL> select username, created from dba_users order by 2;
解決方案: 刪除原有的已經完成的遷移任務,再新建新的遷移任務。
4.1.2 遷移評估需要完全兼容才能進行下一步
問題現象:【遷移評估】流程執行后,存在部分不兼容對象,無法進行下一步操作。
原因分析: YMP設定的邏輯是兼容達到100%,才能進行下一步操作。
解決方案: 根據實際情況進行不兼容對象處理,可以在線改造SQL或者忽略該不兼容對象后,完成后執行【刷新報告】,兼容度達到100%后可以進行下一步操作。
4.1.3 遷移評估不兼容的對象僅支持在線修改
問題現象: 不兼容SQL提示表不存在,改造SQL后在YMP內置庫執行創建表操作,【刷新報告】之后還是提示表不存在。
原因分析: 【遷移評估】中不兼容的對象,不支持直接在內置庫中進行直接修改后跳過不兼容錯誤。在“刷新報告”之后,手動新增的內置庫內容會自動被刪除掉。
解決方案: YMP平臺上在線更新不兼容對象的SQL語句后,執行【驗證并保存】操作。
4.1.5 YMP內置庫版本必須大于或等于目標端數據庫版本
4.1.6 數據遷移失敗不支持手動修復狀態
問題現象: 【離線遷移】流程中針對部分數據遷移失敗的數據,無法手動修復狀態。
原因分析: YMP暫不支持手動修復數據遷移失敗的狀態。
解決方案: 查看遷移失敗問題詳情后,在內置庫處理對應失敗問題,執行【遷移重試】后完成遷移。
4.2 YMP遷移兼容問題
4.2.1 auto_increment替換問題
問題現象: YashanDB建表語句中使用auto_increment關鍵字執行失敗。
原因分析: 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工具遷移過程中出現字符長度超出。
原因分析: 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改造過程中,執行建表語句遇到關鍵字沖突問題。
原因分析: 建表過程中有個字段名為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"報錯。
原因分析: MYSQL數據庫支持簡寫的字面量查詢方式,YashanDB數據庫需要使用DUAL偽表做查詢。
解決方案: 使用DUAL做偽表即可規避。
4.2.5 索引鍵長度超過上限
問題現象: YMP遷移評估不兼容對象提示索引字符長度超出。
原因分析: 查看組合索引的3個字段長度,(500CHAR+500CHAR+500CHAR)*4=6000bytes,剛好等于6000bytes的上限。
解決方案: 根據實際情況調整組合索引字段長度。
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.遷移小結
- YMP遷移工具部署簡單,操作界面簡潔美觀,操作流程清晰明了,小白也可以輕松上手;
- 遷移過程透明化,從評估到遷移整個流程都提供了詳細的報告供下載;
- 產品功能上還存在優化空間,地理空間類型遷移能力也較薄弱;
- YMP目前僅支持全量遷移,暫不支持在線遷移或實時同步等功能;
- 總體而言,YMP的遷移體驗還是蠻不錯的。優秀的產品總是在各式各樣的應用場景不斷迭代后誕生,希望YMP產品能夠不斷優化迭代,做的越來越好!YashanDB加油!國產數據庫加油!