MySQL資料庫使用pg_chameleon遷移至openGauss
pg_chameleon介紹
-
透過讀取MySQL的binlog,提供實時線上複製的功能。
-
支援從多個MySQL schema讀取資料,並將其恢復到目標openGauss資料庫中。源schema和目標schema可以使用不同的名稱。
-
透過守護程式實現實時複製,包含兩個子程式,一個負責讀取MySQL側的日誌,一個負責在openGauss側重演變更。
pg_chameleon在openGauss上的使用注意事項
-
pg_chameleon依賴psycopg2,psycopg2內部透過pg_config檢查PostgreSQL版本號,限制低版本PostgreSQL使用該驅動。而openGauss的pg_config返回的是openGauss的版本號(當前是 openGauss 2.0.0),會導致該驅動報版本錯誤,“Psycopg requires PostgreSQL client library (libpq) >= 9.1”。解決方案為透過原始碼編譯使用psycopg2,並去掉原始碼標頭檔案 psycopg/psycopg.h 中的相關限制。
-
pg_chameleon透過設定LOCK_TIMEOUT GUC引數限制在PostgreSQL中的等鎖的超時時間。openGauss不支援該引數(openGauss支援類似的GUC引數lockwait_timeout,但是需要管理員許可權設定)。需要將pg_chameleon原始碼中的相關設定去掉。
-
pg_chameleon用到了upsert語法,用來指定發生違反約束時的替換動作。openGauss支援的upsert功能語法與PostgreSQL的語法不同。openGauss的語法是 ON DUPLICATE KEY UPDATE { column_name = { expression | DEFAULT } } [, ...]。PostgreSQL的語法是 ON CONFLICT [ conflict_target ] DO UPDATE SET { column_name = { expression | DEFAULT } }。兩者在功能和語法上略有差異。需要修改pg_chameleon原始碼中相關的upsert語句。
-
pg_chameleon用到了CREATE SCHEMA IF NOT EXISTS、CREATE INDEX IF NOT EXISTS語法。openGauss不支援SCHEMA和INDEX的IF NOT EXISTS選項。需要修改成先判斷SCHEMA和INDEX是否存在,然後再建立的邏輯。
-
openGauss對於陣列的範圍選擇,使用的是 column_name[start, end] 的方式。而PostgreSQL使用的是 column_name[start : end] 的方式。需要修改pg_chameleon原始碼中關於陣列的範圍選擇方式。
-
pg_chameleon使用了繼承表(INHERITS)功能,而當前openGauss不支援繼承表。需要改寫使用到繼承表的SQL語句和表。
接下來我們將演示如何使用pg_chameleon遷移MySQL資料庫至openGauss。
配置pg_chameleon
pg_chameleon透過 ~/.pg_chameleon/configuration下的配置檔案config-example.yaml定義遷移過程中的各項配置。整個配置檔案大約分成四個部分,分別是全域性設定、型別過載、目標資料庫連線設定、源資料庫設定。全域性設定主要定義log檔案路徑、log等級等。型別過載讓使用者可以自定義型別轉換規則,允許使用者覆蓋已有的預設轉換規則。目標資料庫連線設定用於配置連線至openGauss的連線引數。源資料庫設定定義連線至MySQL的連線引數以及其他複製過程中的可配置專案。
詳細的配置項解讀,可檢視官網的說明:
https://pgchameleon.org/documents_v2/configuration_file.html
下面是一份配置檔案示例:
# 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: ''
# type_override allows the user to override the default type conversion
# into a different one.
type_override:
"tinyint(1)":
override_to: boolean
override_tables:
- "*"
# postgres destination connection
pg_conn:
host: "1.1.1.1"
port: "5432"
user: "opengauss_test"
password: "password_123"
database: "opengauss_database"
charset: "utf8"
sources:
mysql:
db_conn:
host: "1.1.1.1"
port: "3306"
user: "mysql_test"
password: "password123"
charset: 'utf8'
connect_timeout: 10
schema_mappings:
mysql_database:sch_mysql_database
limit_tables:
skip_tables:
grant_select_to:
- usr_migration
lock_timeout: "120s"
my_server_id: 1
replica_batch_size: 10000
replay_max_rows: 10000
batch_retention: '1 day'
copy_max_memory: "300M"
copy_mode: 'file'
out_dir: tmp
sleep_loop: 1
on_error_replay: continue
on_error_read: continue
auto_maintenance: "disabled"
gtid_enable: false
type: mysql
keep_existing_schema: No
以上配置檔案的含義是,遷移資料時,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,同時會在opengauss_database下建立sch_mysql_database schema,遷移的表都將位於該schema下。
需要注意的是,這裡使用的使用者需要有遠端連線MySQL和openGauss的許可權,以及對對應資料庫的讀寫許可權。同時對於openGauss,執行pg_chameleon所在的機器需要在openGauss的遠端訪問白名單中。對於MySQL,使用者還需要有RELOAD、REPLICATION CLIENT、REPLICATION SLAVE的許可權。
下面開始介紹整個遷移的步驟。
建立使用者及database
在openGauss側建立遷移時需要用到的使用者以及database。
在MySQL側建立遷移時需要用到的使用者並賦予相關許可權。
開啟MySQL的複製功能
修改MySQL的配置檔案,一般是/etc/my.cnf或者是 etc/my.cnf.d/ 資料夾下的cnf配置檔案。在[mysqld] 配置塊下修改如下配置(若沒有mysqld配置塊,新增即可):
[mysqld]
binlog_format= ROW
log_bin = mysql-bin
server_id = 1
binlog_row_image=FULL
expire_logs_days = 10
修改完畢後需要重啟MySQL使配置生效。
執行pg_chameleon進行資料遷移
1. 建立python虛擬環境並啟用
python3 -m venv venv
source venv/bin/activate
2. 下載安裝psycopg2和pg_chameleon
更新pip:pip install pip --upgrade
將openGauss的 pg_config 工具所在資料夾加入到 $PATH 環境變數中。例如:
export PATH={openGauss-server}/dest/bin: $PATH
下載psycopg2原始碼( ),去掉檢查PostgreSQL版本的限制,使用 python setup.py install編譯安裝。
下載pg_chameleon原始碼( ),修改前面提到的在openGauss上的問題,使用 python setup.py install編譯安裝。
3. 建立pg_chameleon配置檔案目錄
chameleon set_configuration_files
4. 修改pg_chameleon配置檔案
cd ~ /.pg_chameleon/configuration
cp config-example.yml default.yml
根據實際情況修改 default.yml 檔案中的內容。重點修改pg_conn和mysql中的連線配置資訊,使用者資訊,資料庫資訊,schema對映關係。前面已給出一份配置檔案示例供參考。
5. 初始化複製流
chameleon create_replica_schema --config default
chameleon add_source --config default --source mysql
此步驟將在openGauss側建立用於複製過程的輔助schema和表。
6. 複製基礎資料
chameleon init_replica --config default --source mysql
做完此步驟後,將把MySQL當前的全量資料複製到openGauss。
可以在openGauss側檢視全量資料複製後的情況。
7. 開啟線上實時複製
chameleon start_replica --config default --source mysql
開啟實時複製後,在MySQL側插入一條資料:
在openGauss側檢視 test_decimal 表的資料:
可以看到新插入的資料在openGauss側成功被複制過來了。
8. 停止線上複製
chameleon stop_replica --config default --source mysql
chameleon detach_replica --config default --source mysql
chameleon drop_replica_schema --config default
更多內容請參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69999989/viewspace-2924558/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料遷移至MySQLOracleMySql
- 資料庫遷移至+ASM中資料庫
- sqlserver使用者資料庫遷移至其他盤SQLServer資料庫
- Oracle資料庫遷移至PolarDb(阿里雲資料庫)Oracle資料庫阿里
- ETL資料整合丨PostgreSQL資料遷移至Hive資料庫SQLHive資料庫
- 【Mysql】Mysql遷移至postgrepsqlMySql
- 資料檔案遷移至其他磁碟組
- 遷移MySQL 5.7資料庫MySql資料庫
- mysql資料庫遷移 mysqldumpMySql資料庫
- MySQL資料庫遷移到PostgresMySql資料庫
- MySQL資料庫遷移與MySQL資料庫批量恢復MySql資料庫
- 【RMAN】Oracle使用rman將11.2.0.4資料庫遷移至Oracle12c命令參考Oracle資料庫
- 【遷移】使用rman遷移資料庫資料庫
- linux mysql資料庫遷移LinuxMySql資料庫
- 舊NAS資料遷移至新NAS怎麼做
- oracle之 RAC本地資料檔案遷移至ASMOracleASM
- MySql資料庫遷移圖文展示MySql資料庫
- 使用expdp、impdp遷移資料庫資料庫
- MySQL資料庫資料檔案路徑遷移步驟MySql資料庫
- 如何從自建MySQL遷移至阿里雲RDS for MySQL的教程MySql阿里
- 移至64位SQL Server資料庫(轉)SQLServer資料庫
- 資料庫週刊31丨openGauss 正式開源;7月資料庫排行榜;浙江移動資料庫AntDB遷移……資料庫
- Oracle資料庫遷移 - 異構傳輸表空間TTS HP-UX遷移至Redhat Linux 7.7Oracle資料庫TTSRedhatLinux
- 達夢遷移工具之MySQL資料庫遷移到達夢MySql資料庫
- ASM下資料檔案遷移至不同磁碟組小記ASM
- 【RAC】RAC本地資料檔案遷移至ASM的方法(3)ASM
- 【RAC】RAC本地資料檔案遷移至ASM的方法(2)ASM
- 【RAC】RAC本地資料檔案遷移至ASM的方法(1)ASM
- openGauss資料庫分析問題資料庫
- openGauss 分散式資料庫能力分散式資料庫
- windows平臺下Oracle10.2 RMAN資料庫遷移至Linux平臺下WindowsOracle資料庫Linux
- 【DATAPUMP】使用DataPump遷移Oracle資料庫Oracle資料庫
- 使用資料泵(expdp、impdp)遷移資料庫流程資料庫
- MySQL資料庫使用(二)MySql資料庫
- Centos MySQL資料庫遷移詳細步驟CentOSMySql資料庫
- 摩杜雲資料庫MySQL,破解異構資料庫遷移難題資料庫MySql
- 使用資料庫冷備份方式進行資料庫遷移,資料庫檔案遷移到不同的目錄資料庫
- 【Golang+mysql】記一次mysql資料庫遷移(一)GolangMySql資料庫