您好,登錄后才能下訂單哦!
下面會用到一個perl腳本來做數據格式的轉換: https://github.com/ahammond/mysql2pgsql
1 導出mysql的數據
#?導出結構 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 #?導出數據 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轉為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替換操作的原因是:?這里我遇到幾個問題(我下面的操作處理的不夠優雅): 1?部分int?unsigned的數據,perl腳本給轉成了int?signed,導致范圍縮小了,后續插入數據可能溢出,因此我這里將全部建表語句中的int?替換為bigint 2?注意?datetime的列,在PG里面我們需要人工改成?timestamp?類型的,不然會報錯 3?smallint?都改成?int類型,防止到PG中插入溢出
3 將文件導入到PG庫中(注意可能有些不兼容的報錯)
chown?postgres.postgres?/tmp/bbb.sql psql?--port?5434?-d?testdb?-f?/tmp/bbb.sql???即可導入到PG的testdb庫中
4 后續的增量數據同步,可以使用 go-mysql-postgresql來進行(下一篇blog介紹用法)
我們?導出data.sql?的時候,?已經帶上?master-data了,很容易就知道最后復制的binlog位置。
## 參考? http://zhansq.cn/article/18-08-09/43.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。