【Mysql】Mysql遷移至postgrepsql

小亮520cl發表於2017-04-28

1mysql遷移資料至postgrepsql

推薦阿里工具mysql2pgsql,專案地址https://help.aliyun.com/document_detail/35458.html

mysql2pgsql

工具 mysql2pgsql 支援不落地的把 MYSQL 中的表遷移到 HybridDB/Greenplum Database/PostgreSQL/PPAS。此工具的原理是,同時連線源端 mysql 資料庫和目的端資料庫,從 mysql 庫中透過查詢得到要匯出的資料,然後透過 COPY 命令匯入到目的端。此工具支援多執行緒匯入(每個工作執行緒負責匯入一部分資料庫表)。

引數配置

修改配置檔案 my.cfg、配置源和目的庫連線資訊。

  • 源庫 mysql 的連線資訊如下:

    注意:源庫 mysql 的連線資訊中,使用者需要有對所有使用者表的讀許可權。

    1. [src.mysql]
    2. host = "127.0.0.1"
    3. port = "3307"
    4. user = "root"
    5. password = "ESBecs00!@#"
    6. db = "devops"
    7. encodingdir = "share"
    8. encoding = "utf8"
    9. binlogfile = "mysql-bin.000001"
    10. binlogfile_offset = "4"
    11. serverid = 13307


  • 目的庫 pgsql (包括 Postgresql、PPAS 和 HybridDB )的連線資訊如下:

    注意:目的庫 pgsql 的連線資訊,使用者需要對目標表有寫的許可權。

    1. [desc.pgsql]
    2. connect_string = "host=127.0.0.1 dbname=exampledb port=5432 user=testpg password=testpg"
    3. target_schema = "public"
    4. ignore_copy_error_count_each_table = "0"


mysql2pgsql 用法

mysql2pgsql 的用法如下所示:
        ./mysql2pgsql -l  -d -n -j <number of threads> -s <schema of target able> 

引數說明:

  • -l:可選引數,指定一個文字檔案,檔案中含有需要同步的表;如果不指定此引數,則同步配置檔案中指定資料庫下的所有表。為一個檔名,裡面含有需要同步的表集合以及表上查詢的條件,其內容格式示例如下:

    1. table1 : select * from table_big where column1 < '2016-08-05'
    2. table2 :
    3. table3
    4. table4: select column1, column2 from tableX where column1 != 10
    5. table5: select * from table_big where column1 >= '2016-08-05

  • -d:可選引數,表示只生成目的表的建表 DDL 語句,不實際進行資料同步。

  • -n:可選引數,需要與-d一起使用,指定在 DDL 語句中不包含表分割槽定義。

  • -j:可選引數,指定使用多少執行緒進行資料同步;如果不指定此引數,會使用 5 個執行緒併發。

  • -s:可選引數,指定目標表的schema,一次命令只能指定一個schema。如果不指定此引數,則資料會匯入到public下的表。

典型用法

全庫遷移

全庫遷移的操作步驟如下所示:

  1. 透過如下命令,獲取目的端對應表的 DDL。
    ./mysql2pgsql -d 

  2. 根據這些 DDL,再加入 distribution key 等資訊,在目的端建立表。

  3. 執行如下命令,同步所有表:
    ./mysql2pgsql 

    此命令會把配置檔案中所指定資料庫中的所有 mysql 表資料遷移到目的端。過程中使用 5 個執行緒(即預設執行緒數為 5),讀取和匯入所有涉及的表資料。


部分表遷移

  1. 編輯一個新檔案 tab_list.txt,放入如下內容:

    1. t1
    2. t2 : select * from t2 where c1 > 138888
  2. 執行如下命令,同步指定的 t1 和 t2 表(注意 t2 表只遷移符合 c1 > 138888 條件的資料):

    1. ./mysql2pgsql -l tab_list.txt

付網盤下載連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2138179/,如需轉載,請註明出處,否則將追究法律責任。

相關文章