下面會用到一個perl腳原本作數據格式的轉換: https://github.com/ahammond/mysql2pgsql
html
1 導出mysql的數據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格式的,命令相似以下git
下載 到 /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庫中(注意可能有些不兼容的報錯)github
chown postgres.postgres /tmp/bbb.sql psql --port 5434 -d testdb -f /tmp/bbb.sql 便可導入到PG的testdb庫中
4 後續的增量數據同步,能夠使用 go-mysql-postgresql來進行(下一篇blog介紹用法)sql
咱們 導出data.sql 的時候, 已經帶上 master-data了,很容易就知道最後複製的binlog位置。
## 參考 http://zhansq.cn/article/18-08-09/43.htmlbash