全部產品
Search
文件中心

PolarDB:使用mysqldump匯入匯出資料

更新時間:Jul 06, 2024

PolarDB-X 1.0支援MySQL官方資料匯出工具mysqldump。本文將介紹如何使用mysqldump匯入匯出PolarDB-X 1.0的資料。

注意事項

  • 關於mysqldump命令的詳細說明,請參見MySQL 官方文檔
  • mysqldump適合小資料量(低於1000萬)的離線匯入匯出。如果需要完成更巨量資料量或者即時的資料移轉任務,請參考阿里雲提供的從自建MySQL遷移至PolarDB-X

情境一:從MySQL中匯出資料到文字檔

  1. 從MySQL中匯出資料到文字檔。
    輸入如下命令,從MySQL匯出表結構和資料(假設匯出檔案為dump.sql)。
    mysqldump -h ip -P port -u user -p password --default-character-set=char-set --net_buffer_length=10240 --no-create-db --skip-add-locks --skip-lock-tables --skip-tz-utc --set-charset  [--hex-blob] [--no-data] database [table1 table2 table3...] > dump.sql
    表 1. 參數說明
    參數名說明是否必選
    ipMySQL的IP。✔️
    portMySQL的連接埠。
    userMySQL的使用者名稱。✔️
    passwordMySQL的密碼,注意前面有個 -p,之間沒有空格。✔️
    char-set指定的編碼。✔️
    --hex-blob使用十六進位格式匯出二進位字串欄位。如果有位元據就必須使用本選項。影響的欄位類型包括 BINARY、VARBINARY、BLOB。
    --no-data不匯出資料。
    table指定匯出某個表。預設匯出該資料庫所有的表。
  2. 修改建表語句。

    從MySQL匯出的資料檔案包含每個表的建表語句。如果直接在PolarDB-X 1.0上執行這些建表語句,會在PolarDB-X 1.0上建立一個單表。如果要對某個表進行分庫分表,那麼需要手動對建表語句進行修改,PolarDB-X 1.0建表語句的文法請參考CREATE TABLE

  3. 匯入資料檔案到PolarDB-X 1.0。您可以通過如下兩種方式的任意一種匯入資料檔案到PolarDB-X 1.0
    • 通過mysql -h ip -P port -u user --default-character-set=char-set命令登入目標PolarDB-X 1.0,執行source /yourpath/dump.sql命令將資料匯入到目標PolarDB-X 1.0
      說明 該方式會把所有的步驟回顯到螢幕上,速度略慢,但是可以觀察匯入處理程序。
    • 直接通過mysql -h ip -P port -u user --default-character-set=char-set< /yourpath/dump.sql命令將資料匯入到目標PolarDB-X 1.0
    說明
    • 上述兩個命令中default-character-set要設定成實際的資料編碼。如果是Windows平台,SOURCE命令指定的檔案路徑需要對分隔字元轉義。
    • 匯入的時候,由於某些PolarDB-X 1.0和MySQL實現上的不同,可能會報錯(如ERROR 1231 (HY000): [a29ef6461c00000][10.117.207.130:3306][****]Variable @saved_cs_client can't be set to the value of @@character_set_client)。此類錯誤資訊並不影響匯入資料的正確性。

情境二:從一個PolarDB-X 1.0匯入到另一個PolarDB-X 1.0

假設您之前有一個測試環境的PolarDB-X 1.0,測試完畢以後,需要把測試過程中的一些表結構和資料匯入到生產環境的PolarDB-X 1.0中,那麼可以按照如下步驟進行操作。

  1. 從源PolarDB-X 1.0中匯出資料到文字檔。
  2. 匯入資料檔案到PolarDB-X 1.0。請參考情境一第3步。
  3. 手動建立Sequence對象。
    mysqldump並不會匯出PolarDB-X 1.0中的Sequence對象,所以如果在源PolarDB-X 1.0中使用了Sequence對象,並且需要在目標PolarDB-X 1.0中繼續使用相同的Sequence對象,則需要手動在目標PolarDB-X 1.0中建立同名的Sequence的對象。具體步驟如下:
    1. 在源PolarDB-X 1.0上執行SHOW SEQUENCES,擷取當前PolarDB-X 1.0中的Sequence對象的狀態。
    2. 在目標PolarDB-X 1.0資料庫上通過CREATE SEQUENCE命令建立新的Sequence對象。

情境三:從PolarDB-X 1.0匯出資料到MySQL

PolarDB-X 1.0匯出資料到MySQL,和在PolarDB-X 1.0之間相互匯入資料的過程類似,也分為以下幾個步驟。

  1. 從源PolarDB-X 1.0中匯出表結構和資料。
    mysqldump -h ip -P port -u user -p password --default-character-set=char-set --net_buffer_length=10240 --no-create-db --skip-add-locks --skip-lock-tables --skip-tz-utc --set-charset  [--hex-blob] [--no-data] database [table1 table2 table3...] > dump.sql
    說明 請將PolarDB-X 1.0的相關參數代入命令中執行。
  2. 手動修改拆分表的DDL語句。
    PolarDB-X 1.0中拆分表的建表語句和MySQL並不相容。為了後續匯入到MySQL中,需手動修改匯出的SQL檔案,刪除以下關鍵字:
    • DBPARTITION BY hash(partition_key):
    • TBPARTITION BY hash(partition_key):
    • TBPARTITIONS N
    • BROADCAST
    例如一個拆分表語句匯出如下:
    CREATE TABLE multi_db_single_tbl
    (id int, 
    name varchar(30), 
    primary key(id)) dbpartition by hash(id);                    
    需修改成以下語句:
    CREATE TABLE multi_db_single_tbl
    (id int,
    name varchar(30), 
    primary key(id));
                        
  3. 匯入修改以後的檔案。請參見情境一第3步。