MySQL數(shù)據(jù)庫使用pgloader遷移至openGauss

pgloader介紹

pgloader是一個數(shù)據(jù)導(dǎo)入工具,使用COPY命令將數(shù)據(jù)導(dǎo)入到PostgreSQL。pgloader有兩種工作模式,一種是從文件導(dǎo)入,一種是遷移數(shù)據(jù)庫。pgloader在兩種情況下都使用PostgreSQL的COPY協(xié)議高效的傳輸數(shù)據(jù)。

openGauss兼容PostgreSQL的通信協(xié)議以及絕大部分語法,可使用pgloader將MySQL數(shù)據(jù)庫遷移至openGauss。

pgloader在openGauss上的問題

由于openGauss 對原生PostgreSQL的通信協(xié)議進(jìn)行了安全加固,這導(dǎo)致與PostgreSQL的默認(rèn)通信協(xié)議互相不兼容了,因此,使用pgloader的PostgreSQL原生版本默認(rèn)是不能連接openGauss的。會報類似下述錯誤:

處理方式是通過修改GUC進(jìn)行規(guī)避,涉及的GUC參數(shù)是password_encryption_type,PostgreSQL默認(rèn)的加密方式是md5,由于md5已經(jīng)不安全了,為了提高openGauss的安全能力,openGauss支持sha256, 并且默認(rèn)是sha256的加密方式,這就導(dǎo)致了上述報錯。但是openGauss并沒有刪除md5的加密和驗證邏輯,因此,是可以通過修改該GUC參數(shù)開啟md5加密方式的。

開啟方法:

gs_guc reload -D $PGDATA -c "password_encryption_type = 1"

一定要在設(shè)置完上述參數(shù)后,再新建用戶。然后就可以使用該新建用戶登錄數(shù)據(jù)庫了。

接下來我們將演示如何使用pgloader遷移MySQL數(shù)據(jù)庫至openGauss。

安裝pgloader

您可以直接從 apt.postgresql.org 和官方 debian 存儲庫 packages.debian.org/pgloader 安裝 pgloader。

$ apt-get install pgloader

同時,您也可以通過 docker image 使用pgloader。

$docker pull dimitri/pgloader

$docker run --rm --name pgloader dimitri/pgloader:latest pgloader --version

$docker run --rm --name pgloader dimitri/pgloader:latest pgloader –help

配置pgloader

pgloader提供豐富的配置項,您可以自由定義遷移時的各類動作,如通過include drop,刪除目標(biāo)數(shù)據(jù)庫中名稱出現(xiàn)在MySQL數(shù)據(jù)庫中的所有表,以允許連續(xù)多次使用同一命令,從干凈的環(huán)境自動啟動。

這里簡單介紹幾個常用的配置項。

FROM:源數(shù)據(jù)庫的連接URL,格式如下:

?mysql://[user[:password]@][netloc][:port][/dbname][?option=value&...]

INTO:目標(biāo)數(shù)據(jù)庫的連接URL,格式如下:

?postgresql://[user[:password]@][netloc][:port][/dbname][?option=value&...]

WITH:從MySQL數(shù)據(jù)庫加載時的選項。有include drop、create tables、create indexes等選項。

CAST:用戶自定義類型轉(zhuǎn)換規(guī)則。允許用戶覆蓋已有的默認(rèn)轉(zhuǎn)換規(guī)則或者使用特殊情況修改它們。

部分遷移:用戶可以通過 including only table names matching 和 excluding table names matching 實現(xiàn)只遷移特定的表或者在遷移過程中排除特定的表。

詳細(xì)的配置項解讀,可查看官網(wǎng)的說明:

https://pgloader.readthedocs.io/en/latest/ref/mysql.html

下面是一份從MySQL遷移到openGauss的配置文件示例:

LOAD DATABASE

FROM mysql://mysql_test:password123@1.1.1.1:3306/mysql_database

INTO postgresql://opengauss_test:password_123@1.1.1.1:5432/opengauss_database

WITH include drop, create tables, create indexes, reset no sequences,

workers = 8, concurrency = 1,

multiple readers per thread, rows per range = 50000

CAST

type varchar when(= 1 precision) to "boolean" drop typemod keep default keep not null;

以上配置文件的含義是,遷移數(shù)據(jù)時,MySQL側(cè)使用的用戶名密碼分別是 mysql_test 和 password123。MySQL服務(wù)器的IP和port分別是1.1.1.1和3306,待遷移的數(shù)據(jù)庫是mysql_database。

openGauss側(cè)使用的用戶名密碼分別是 opengauss_test 和 password_123。openGauss服務(wù)器的IP和port分別是1.1.1.1和5432,目標(biāo)數(shù)據(jù)庫是opengauss_database。

需要注意的是,這里使用的用戶需要有遠(yuǎn)程連接MySQL和openGauss的權(quán)限,以及對對應(yīng)數(shù)據(jù)庫的讀寫權(quán)限。同時對于openGauss,運行pgloader所在的機(jī)器需要在openGauss的遠(yuǎn)程訪問白名單中。

創(chuàng)建用戶及database

在openGauss側(cè)創(chuàng)建遷移時需要用到的用戶以及database。

運行pgloader進(jìn)行數(shù)據(jù)遷移

以下演示基于使用docker image方式安裝的pgloader。將前面準(zhǔn)備好的配置文件命名為 openGauss.loader。

啟動docker:docker run -tid --name pgloader_test dimitri/pgloader

復(fù)制配置文件到docker:docker cp ./openGauss.loader pgloader_test:/

進(jìn)入docker環(huán)境:docker exec -it pgloader_test bin/bash

啟動pgloader,等待數(shù)據(jù)遷移完成,查看遷移結(jié)果報告:pgloader openGauss.loader

在openGauss側(cè)查看遷移結(jié)果:

更多內(nèi)容請參考:

https://docs.opengauss.org/zh/docs/3.1.0/docs/BriefTutorial/BriefTutorial.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容