項目背景
本教程詳細介紹如何在有限的硬件資源下,將MySQL數據庫平穩遷移到openGauss數據庫系統。隨着企業數字化轉型的深入,越來越多的組織開始關注優越性能數據庫的替代和性能優化。openGauss作為新一代企業級開源關係型數據庫,憑藉其卓越的性能、完善的生態和自主可控的特性,成為MySQL遷移的理想選擇。
本教程基於實際的小型服務器環境,通過3種可行的遷移方案,幫助讀者在資源有限的條件下完成數據庫遷移,同時最大限度發揮openGauss的性能優勢。
為什麼選擇openGauss
1.1 卓越的性能表現
openGauss在性能方面具有顯著優勢,特別是在高併發場景下:
- 事務處理速度提升:相比MySQL,openGauss在OLTP場景下的TPS(每秒事務數)可提升30%-50%,尤其在複雜查詢和多表關聯操作中表現突出
- 併發處理能力:採用無鎖化設計和NUMA-Aware技術,在高併發場景下保持線性擴展能力,支持數千併發連接而不明顯降低性能
- 查詢優化器:內置AI查詢優化器,能夠智能選擇最優執行計劃,對複雜SQL語句的執行效率比MySQL提升20%-40%
- 內存管理:採用內存自適應技術,能夠根據工作負載動態調整內存分配,在4GB內存的小型服務器上也能保持穩定高效運行
1.2 企業級功能特性
openGauss提供了眾多MySQL企業版才有的功能,而且完全開源免費:
- 高可用架構:內置主備複製、級聯備份等高可用方案,RPO(恢復點目標)可達0,RTO(恢復時間目標)小於10秒
- 數據安全:支持透明數據加密、全密態數據庫、細粒度訪問控制等安全特性,滿足等保2.0和金融行業安全標準
- SQL兼容性:高度兼容PostgreSQL和部分MySQL語法,支持B模式(兼容MySQL)、A模式(兼容Oracle),大大降低應用改造成本
- 在線擴容:支持在線添加節點和存儲擴容,無需停機即可應對業務增長
1.3 自主可控與生態優勢
- 自主:完全自主研發,擁有完整知識產權,不受國外技術限制,符合國家信創要求
- 開源生態:基於木蘭寬鬆許可證,擁有活躍的開源社區,已有數百家企業和數千名開發者參與貢獻
- 工具鏈完善:提供數據遷移、監控運維、開發調試等全套工具,降低使用門檻
- 商業支持:有華為等多家廠商提供商業版本和技術支持服務,保障企業級應用
1.4 成本優勢
- 零許可費用:完全開源免費,無需支付高昂的商業數據庫許可費
- 資源利用率高:優秀的資源管理能力,在同等硬件配置下可支撐更大業務量,降低硬件採購成本
- 運維成本低:智能化運維功能減少人工干預,降低運維人力成本
實際環境説明
|
配置項 |
説明 |
|
MySQL版本 |
8.0.27 |
|
openGauss版本 |
5.0.0 (推薦使用最新LTS版本) |
|
操作系統 |
Ubuntu 22.04 LTS (也支持openEuler、CentOS等) |
|
服務器配置 |
雙核CPU、4GB內存 |
|
存儲空間 |
100GB總容量,當前可用58GB |
注意:由於服務器配置有限,遷移過程需要特別注意內存和存儲空間的使用。但openGauss優秀的資源管理能力能夠確保在此配置下穩定運行。
遷移前的準備工作
3.1 檢查MySQL配置
由於服務器內存有限,建議在遷移前對MySQL進行適當的參數調整:
- 檢查當前數據量,確保有足夠的磁盤空間用於導出(建議預留數據量2倍以上的空間)
- 建議在業務低峯期進行遷移,避免影響正常業務運行
- 務必備份原有數據,建議同時進行物理備份和邏輯備份以防萬一
- 記錄當前數據庫的字符集設置(推薦UTF-8),確保遷移後字符集一致
- 導出數據庫表結構,分析是否存在與openGauss不兼容的特性
3.2 安裝openGauss
在Ubuntu 22.04上安裝openGauss,建議使用最小化安裝以節省資源。openGauss的安裝過程簡單快捷:,會自動優化內存參數以適應當前硬件環境,無需手動調整即可獲得良好性能。這裏我們昨天已經安裝好了。
遷移方法選擇
根據實際環境和數據特點,我們提供三種經過驗證的遷移方法。每種方法都針對openGauss的特性進行了優化,能夠充分發揮其性能優勢,其中重點講述一下gsql和gs_chacemeleon的實際體驗。
方法一:使用mysqldump + gsql (推薦用於小數據量)
適用場景:
- 數據量在1GB以下
- 可以接受短暫的業務停機
- 不需要實時同步
- 首次嘗試數據庫遷移,希望使用簡單方法
優點: - 操作簡單,無需安裝額外工具
- 對服務器性能要求低,4GB內存即可順利完成
- 適合小型數據庫快速遷移
- 遷移過程可控,便於出現問題時回滾
操作步驟:
- 導出MySQL數據mysqldump -u root -p --databases rnd \
--single-transaction \
--no-create-db \
--skip-triggers \
> D:\rnd_dump.sql
然後導出之後,將文件上傳到服務器,這裏就不闡述如何將文件放到服務器了,有很多方法。
放到服務器上,再複製進docker容器內
sudo docker cp /tmp/rnd_dump.sql opengauss:/tmp
- 轉換SQL語法(利用openGauss的兼容性特性)接下來我們進入到容器內:
sudo docker exec -it opengauss bash
由於openGauss提供了B模式(MySQL兼容模式),大部分MySQL語法可以直接使用。但仍需處理少量差異:
sed -i 's/ENGINE=InnoDB//g' /tmp/rnd_dump.sql
sed -i 's/AUTO_INCREMENT/SERIAL/g' /tmp/rnd_dump.sql - 在openGauss中創建數據庫(使用B兼容模式)gsql -d postgres -p 5432
CREATE DATABASE rnd WITH DBCOMPATIBILITY='B';
注: DBCOMPATIBILITY='B'表示使用MySQL兼容模式,這是openGauss的一大特色功能。
- 導入數據到openGauss
gsql -d rnd -p 5432 -f mysql_dump.sql
這裏大約1.1G的sql實際只使用了42秒,這速度相當快了。
這裏我們使用navicat對比一下:
這裏將近五百萬行數據,使用navicat直接傳輸使用了20多分鐘,可見gsql命令的高效性
方法二:使用CSV文件中轉 (推薦用於中等數據量)
適用場景:
- 數據量在1GB-10GB之間
- 需要更快的遷移速度
- 表結構相對簡單
- 需要分批次遷移不同的表
優點: - 速度比mysqldump快2-3倍,openGauss的COPY命令經過高度優化
- 可以分表處理,便於大數據量的分批遷移和管理
- 對內存要求較低,即使在4GB內存環境下也能流暢運行
- CSV格式通用性強,可作為數據備份保存
操作步驟:
- 從MySQL導出CSV文件SELECT * FROM table_name INTO OUTFILE '/tmp/table_name.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'; - 在openGauss中創建表結構mysqldump -u root -p --no-data rnd > schema.sql
然後手動在openGauss中創建表結構,或使用轉換後的schema.sql - 使用COPY命令導入CSV(充分利用openGauss的批量導入優化)
gsql -d rnd -p 5432
\COPY table_name FROM '/tmp/table_name.csv' WITH (FORMAT csv, HEADER true, DELIMITER ',');
預計時間:對於1GB數據,導出約3-5分鐘,導入約4-7分鐘。openGauss的並行COPY功能可以進一步提升導入速度。
但是這種對於多表的遷移就顯得很冗餘,重複性很強,建議這種方法比較適用於單表遷移。
方法三:使用gs_chameleon工具 (推薦用於大數據量)
官方解釋: 基於 sysbench 測試模型,在 Kunpeng-920 2p 服務器上,MySQL 數據庫 10 張表單表數據量在 300 萬以上時,chameleon 使用 10 併發遷移數據至 openGauss,整體全量遷移性能可達 300M/S 以上。
我的理解是當遷移速度很慢,且表數據量很大的時候,該工具就很適合處理這種情景。也就是説,又快又適用於大數據量的庫。
適用場景:
- 數據量超過10GB
- 需要增量同步功能,確保數據實時性
- 要求最小化業務停機時間
- 需要自動化遷移流程
優點: - 支持全量和增量同步,保證數據一致性
- 自動處理數據類型轉換,減少人工干預
- 適合大規模數據遷移和生產環境
- 與openGauss深度集成,充分發揮數據庫性能安裝方法1:
首先我們需要安裝這個工具,先去官網下載whl文件
https://opengauss.org/zh/tools/這裏我的openGauss是5.0.0版本,就下載chameleon5.0.0版本的whl:
再將下載的文件上傳至服務器,再複製到容器內:
sudo docker cp /tmp/chameleon-5.0.0-py3-none-any.whl opengauss:/tmp
安裝方法2:
源碼安裝:通過git下載源碼: git clone git@gitee.com:opengauss/openGauss-tools-chameleon.git
下載完成後,同樣需要先創建python虛擬環境並激活:
python3 -m venv venv
source venv/bin/activate
然後進入代碼的目錄,執行python install命令安裝:
cd openGauss-tools-chameleon-master
python3 setup.py install
安裝完成後,不要退出python虛擬環境,可以開始使用chameleon工具。
注意chameleon需要在非root用户下使用
# global settings
pid_dir: '~/.pg_chameleon/pid/'
log_dir: '~/.pg_chameleon/logs/'
log_dest: file
log_level: info
log_days_keep: 10
rollbar_key: ''
rollbar_env: ''
dump_json: No
# type_override allows the user to override the default type conversion
# into a different one.
type_override:
"tinyint(1)":
override_to: boolean
override_tables:
- "*"
# specify the compress properties when creating tables
compress_properties:
compresstype: 0
compress_level: 0
compress_chunk_size: 4096
compress_prealloc_chunks: 0
compress_byte_convert: false
compress_diff_convert: false
# postgres destination connection
pg_conn:
host: "xxx.xxx.xx.xx"
port: "xx"
user: "xx"
password: "xxx"
database: "xxx"
charset: "utf8"
params:
# maintenance_work_mem: "1G"
# param1: value1
# param2: value2
sources:
mysql:
readers: 4
writers: 4
retry: 3
db_conn:
host: "xxx.xxx.xxx.xxx"
port: "xx"
user: "xxx"
password: "xxx"
charset: 'utf8'
connect_timeout: 10
schema_mappings:
"mysql_databases": "openGauss_databases"
limit_tables:
- delphis_mediterranea.foo
skip_tables:
- delphis_mediterranea.bar
enable_compress: No
compress_tables:
- delphis_mediterranea.foo
grant_select_to:
- usr_readonly
lock_timeout: "120s"
my_server_id: 100
replica_batch_size: 10000
replay_max_rows: 10000
batch_retention: '1 day'
copy_max_memory: "300M"
copy_mode: 'file'
out_dir: /tmp
csv_dir: /tmp
contain_columns: No
column_split: ','
sleep_loop: 1
on_error_replay: continue
on_error_read: continue
auto_maintenance: "disabled"
index_parallel_workers: 2
gtid_enable: false
type: mysql
skip_events:
insert:
- delphis_mediterranea.foo # skips inserts on delphis_mediterranea.foo
delete:
- delphis_mediterranea # skips deletes on schema delphis_mediterranea
update:
keep_existing_schema: No
migrate_default_value: Yes
mysql_restart_config: No
is_create_index: Yes
index_dir: '~/.pg_chameleon/index/'
is_skip_completed_tables: No
with_datacheck: No
slice_size: 100000
csv_files_threshold:
csv_dir_space_threshold:
初始化複製流:
chameleon create_replica_schema --config default
chameleon add_source --config default --source mysql
此步驟將在 openGauss 側創建用於複製過程的輔助 schema 和表。
複製基礎數據:
chameleon init_replica --config default --source mysql
做完此步驟後,將把 MySQL 當前的全量數據複製到 openGauss。
注意看下面的狀態,創建流對象的時候不會插入源數據,當add-source是enm_status是ready的,然後init_replica初始化數據流是,狀態再次發生改變成initialised,表明已初始化成功
接下來就可以執行遷移數據:
狀態就變成running表示正在遷移數據。
針對小型服務器的配置優化:
雖然chameleon功能強大,但在資源受限的環境下需要適當調整參數:
readers: 2 # 默認是4,降低到2以節省內存
writers: 2 # 默認是4,降低到2
replica_batch_size: 5000 # 默認10000,降低批次大小
copy_max_memory: 100M # 默認300M,降低內存使用
預計時間:對於1GB數據,在當前配置下全量遷移約需30秒,增量同步預計延遲通常在1-5分鐘。
針對小型服務器的優化建議
5.1 內存管理
- 在4GB內存環境下,openGauss會自動分配1.5-2GB shared_buffers,無需手動調整
- 遷移時關閉不必要的服務以釋放內存,如Web服務器、監控服務等
- 如果出現內存不足,openGauss的內存管理器會自動進行垃圾回收,也可以考慮分批遷移
- 利用openGauss的內存池技術,可以有效減少內存碎片
5.2 存儲空間管理
- 定期清理臨時文件和日誌,openGauss提供自動日誌清理功能
- 導出的SQL或CSV文件使用後及時刪除
- 使用df -h命令監控磁盤使用情況,建議保留至少20GB空閒空間
- openGauss支持表空間管理,可以靈活分配存儲資源
5.3 性能調優技巧
- 在業務低峯期進行遷移,減少對系統的壓力
- 遷移完成後,使用openGauss的ANALYZE命令收集統計信息,優化查詢計劃
- 創建必要的索引,openGauss支持B-tree、Hash、GiST等多種索引類型
- 對大表可以考慮使用分區表功能,提升查詢和維護效率
- 啓用openGauss的查詢緩存功能,提升重複查詢的響應速度
數據驗證
遷移完成後,必須進行嚴格的數據驗證以確保數據完整性和一致性。openGauss提供了豐富的驗證工具:
6.1 基礎驗證
-- 比對錶數量
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='rnd';
-- 比對記錄數
這裏我隨機抽取了兩個表去查詢記錄數都是一樣的
SELECT COUNT(*) FROM finance_wages_record;
SELECT COUNT(*) FROM project_staff_checkin_detail;
6.2 深度校驗
- 數據抽樣檢查:隨機抽取部分數據,對比MySQL和openGauss中的數據是否完全一致
- 業務邏輯驗證:運行關鍵業務查詢,確保結果正確
- 性能基準測試:使用相同的查詢測試兩個數據庫的性能,通常openGauss會有20%-50%的性能提升
- 字符集驗證:檢查中文等特殊字符是否正常顯示
- 約束檢查:驗證主鍵、外鍵、唯一約束等是否正確遷移
總結與建議
根據在雙核4G內存服務器上的實際測試,我們得出以下最佳實踐建議:
- 小數據量(1GB以下):使用mysqldump方法,簡單直接,2-3分鐘即可完成
- 中等數據量(1-10GB):使用CSV中轉方法,速度快且可靠,通常1-2小時完成
- 大數據量(10GB以上):使用chameleon工具,雖然配置稍複雜,但支持增量同步,適合生產環境,且速度極快,只是少許配置較為繁瑣。
openGauss的遷移優勢總結
- 性能卓越:遷移後性能通常提升30%-50%,查詢響應更快
- 兼容性好: B模式高度兼容MySQL,應用改造工作量小
- 資源高效:即使在4GB內存的小型服務器上也能穩定運行
- 功能豐富:提供高可用、安全加密、在線擴容等企業級特性
- 成本低廉:開源免費,無許可費用,降低總體擁有成本
- 自主可控:完全,符合信創要求,保障數據安全
重要提醒:由於服務器配置有限,強烈建議在遷移前先在測試環境中進行完整測試,熟悉遷移流程並驗證應用兼容性。確保遷移方案可行後再在生產環境執行。數據備份是必不可少的安全措施。
參考文檔
- openGauss官方文檔: https://docs.opengauss.org/
- openGauss社區:https://opengauss.org/
- MySQL官方文檔: https://dev.mysql.com/doc/
- 數據遷移最佳實踐: https://opengauss.org/zh/migration/