您好,登錄后才能下訂單哦!
下面會(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
免責(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)容。