溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL數(shù)據(jù)全量導(dǎo)入PG的方法

發(fā)布時(shí)間:2020-06-18 11:10:49 來(lái)源:網(wǎng)絡(luò) 閱讀:940 作者:我的二狗呢 欄目:系統(tǒng)運(yùn)維

下面會(huì)用到一個(gè)perl腳本來(lái)做數(shù)據(jù)格式的轉(zhuǎn)換: https://github.com/ahammond/mysql2pgsql


1 導(dǎo)出mysql的數(shù)據(jù)

#?導(dǎo)出結(jié)構(gòu)
mysqldump?bx_cmdb_37?--master-data=2??--skip-opt?--default-character-set=utf8?--no-data?--compact?--skip-dump-date?--set-gtid-purged=OFF?>?/tmp/struct.sql

#?導(dǎo)出數(shù)據(jù)
mysqldump?bx_cmdb_37?--master-data=2??--skip-opt?--default-character-set=utf8?--no-create-info??--compact?--skip-dump-date?--set-gtid-purged=OFF?>?/tmp/data.sql


2 使用perl腳本,將上一步驟中的2個(gè)sql轉(zhuǎn)為pg格式的,命令類似如下

下載?到?/root/目錄下
chmod?+x?/root/mysql2pgsql.perl

cd?/tmp/

/root/mysql2pgsql.perl?struct.sql?struct_pg.sql
/root/mysql2pgsql.perl?data.sql?data_pg.sql

sed?-i.bak?'s#?int?#?bigint?#g'?struct_pg.sql
sed?-i.bak?'s#?smallint?#?int?#g'?struct_pg.sql
sed?-i.bak?'s#?datetime(6)?#?timestamp?#g'?struct_pg.sql

做上面的幾個(gè)sed替換操作的原因是:?這里我遇到幾個(gè)問題(我下面的操作處理的不夠優(yōu)雅):
1?部分int?unsigned的數(shù)據(jù),perl腳本給轉(zhuǎn)成了int?signed,導(dǎo)致范圍縮小了,后續(xù)插入數(shù)據(jù)可能溢出,因此我這里將全部建表語(yǔ)句中的int?替換為bigint
2?注意?datetime的列,在PG里面我們需要人工改成?timestamp?類型的,不然會(huì)報(bào)錯(cuò)
3?smallint?都改成?int類型,防止到PG中插入溢出




3 將文件導(dǎo)入到PG庫(kù)中(注意可能有些不兼容的報(bào)錯(cuò))

chown?postgres.postgres?/tmp/bbb.sql
psql?--port?5434?-d?testdb?-f?/tmp/bbb.sql???即可導(dǎo)入到PG的testdb庫(kù)中




4 后續(xù)的增量數(shù)據(jù)同步,可以使用 go-mysql-postgresql來(lái)進(jìn)行(下一篇blog介紹用法)

我們?導(dǎo)出data.sql?的時(shí)候,?已經(jīng)帶上?master-data了,很容易就知道最后復(fù)制的binlog位置。



## 參考? http://zhansq.cn/article/18-08-09/43.html

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI