pgloader介紹
pgloader是一個資料匯入工具,使用COPY命令將資料匯入到PostgreSQL,pgloader有兩種作業模式,一種是從檔案匯入,一種是遷移資料庫,pgloader在兩種情況下都使用PostgreSQL的COPY協議高效的傳輸資料,
openGauss兼容PostgreSQL的通信協議以及絕大部分語法,可使用pgloader將MySQL資料庫遷移至openGauss,
pgloader在openGauss上的問題
由于openGauss 對原生PostgreSQL的通信協議進行了安全加固,這導致與PostgreSQL的默認通信協議互相不兼容了,因此,使用pgloader的PostgreSQL原生版本默認是不能連接openGauss的,會報類似下述錯誤:

處理方式是通過修改GUC進行規避,涉及的GUC引數是password_encryption_type,PostgreSQL默認的加密方式是md5,由于md5已經不安全了,為了提高openGauss的安全能力,openGauss支持sha256, 并且默認是sha256的加密方式,這就導致了上述報錯,但是openGauss并沒有洗掉md5的加密和驗證邏輯,因此,是可以通過修改該GUC引數開啟md5加密方式的,
開啟方法:
gs_guc reload -D $PGDATA -c "password_encryption_type = 1"
一定要在設定完上述引數后,再新建用戶,然后就可以使用該新建用戶登錄資料庫了,
接下來我們將演示如何使用pgloader遷移MySQL資料庫至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,洗掉目標資料庫中名稱出現在MySQL資料庫中的所有表,以允許連續多次使用同一命令,從干凈的環境自動啟動,
這里簡單介紹幾個常用的配置項,
FROM:源資料庫的連接URL,格式如下:
mysql://[user[:password]@][netloc][:port][/dbname][?option=value&...]
INTO:目標資料庫的連接URL,格式如下:
postgresql://[user[:password]@][netloc][:port][/dbname][?option=value&...]
WITH:從MySQL資料庫加載時的選項,有include drop、create tables、create indexes等選項,
CAST:用戶自定義型別轉換規則,允許用戶覆寫已有的默認轉換規則或者使用特殊情況修改它們,
部分遷移:用戶可以通過 including only table names matching 和 excluding table names matching 實作只遷移特定的表或者在遷移程序中排除特定的表,
詳細的配置項解讀,可查看官網的說明:
Migrating a MySQL Database to PostgreSQL — pgloader 3.4.1 documentation
下面是一份從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;
以上組態檔的含義是,遷移資料時,MySQL側使用的用戶名密碼分別是 mysql_test 和 password123,MySQL服務器的IP和port分別是1.1.1.1和3306,待遷移的資料庫是mysql_database,
openGauss側使用的用戶名密碼分別是 opengauss_test 和 password_123,openGauss服務器的IP和port分別是1.1.1.1和5432,目標資料庫是opengauss_database,
需要注意的是,這里使用的用戶需要有遠程連接MySQL和openGauss的權限,以及對對應資料庫的讀寫權限,同時對于openGauss,運行pgloader所在的機器需要在openGauss的遠程訪問白名單中,
創建用戶及database
在openGauss側創建遷移時需要用到的用戶以及database,

運行pgloader進行資料遷移
以下演示基于使用docker image方式安裝的pgloader,將前面準備好的組態檔命名為 openGauss.loader,

啟動docker:docker run -tid --name pgloader_test dimitri/pgloader復制組態檔到docker:docker cp ./openGauss.loader pgloader_test:/進入docker環境:docker exec -it pgloader_test /bin/bash

啟動pgloader,等待資料遷移完成,查看遷移結果報告:pgloader openGauss.loader

在openGauss側查看遷移結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317854.html
標籤:其他
