下面會用到一個perl腳本來做數(shù)據(jù)格式的轉(zhuǎn)換: https://github.com/ahammond/mysql2pgsql
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:國際域名空間、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、平順網(wǎng)站維護、網(wǎng)站推廣。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個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 做上面的幾個sed替換操作的原因是:?這里我遇到幾個問題(我下面的操作處理的不夠優(yōu)雅): 1?部分int?unsigned的數(shù)據(jù),perl腳本給轉(zhuǎn)成了int?signed,導(dǎo)致范圍縮小了,后續(xù)插入數(shù)據(jù)可能溢出,因此我這里將全部建表語句中的int?替換為bigint 2?注意?datetime的列,在PG里面我們需要人工改成?timestamp?類型的,不然會報錯 3?smallint?都改成?int類型,防止到PG中插入溢出
3 將文件導(dǎo)入到PG庫中(注意可能有些不兼容的報錯)
chown?postgres.postgres?/tmp/bbb.sql psql?--port?5434?-d?testdb?-f?/tmp/bbb.sql???即可導(dǎo)入到PG的testdb庫中
4 后續(xù)的增量數(shù)據(jù)同步,可以使用 go-mysql-postgresql來進行(下一篇blog介紹用法)
我們?導(dǎo)出data.sql?的時候,?已經(jīng)帶上?master-data了,很容易就知道最后復(fù)制的binlog位置。
## 參考? http://zhansq.cn/article/18-08-09/43.html
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。