PolarDB-X 1.0支援MySQL官方資料匯出工具mysqldump。本文將介紹如何使用mysqldump匯入匯出PolarDB-X 1.0的資料。
注意事項
- 關於mysqldump命令的詳細說明,請參見MySQL 官方文檔。
- mysqldump適合小資料量(低於1000萬)的離線匯入匯出。如果需要完成更巨量資料量或者即時的資料移轉任務,請參考阿里雲提供的從自建MySQL遷移至PolarDB-X。
情境一:從MySQL中匯出資料到文字檔
- 從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. 參數說明 參數名 說明 是否必選 ip MySQL的IP。 ✔️ port MySQL的連接埠。 ❌ user MySQL的使用者名稱。 ✔️ password MySQL的密碼,注意前面有個 -p,之間沒有空格。 ✔️ char-set 指定的編碼。 ✔️ --hex-blob 使用十六進位格式匯出二進位字串欄位。如果有位元據就必須使用本選項。影響的欄位類型包括 BINARY、VARBINARY、BLOB。 ❌ --no-data 不匯出資料。 ❌ table 指定匯出某個表。預設匯出該資料庫所有的表。 ❌ - 修改建表語句。
從MySQL匯出的資料檔案包含每個表的建表語句。如果直接在PolarDB-X 1.0上執行這些建表語句,會在PolarDB-X 1.0上建立一個單表。如果要對某個表進行分庫分表,那麼需要手動對建表語句進行修改,PolarDB-X 1.0建表語句的文法請參考CREATE TABLE。
- 匯入資料檔案到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中,那麼可以按照如下步驟進行操作。
- 從源PolarDB-X 1.0中匯出資料到文字檔。
- 匯入資料檔案到PolarDB-X 1.0。請參考情境一第3步。
- 手動建立Sequence對象。mysqldump並不會匯出PolarDB-X 1.0中的Sequence對象,所以如果在源PolarDB-X 1.0中使用了Sequence對象,並且需要在目標PolarDB-X 1.0中繼續使用相同的Sequence對象,則需要手動在目標PolarDB-X 1.0中建立同名的Sequence的對象。具體步驟如下:
- 在源PolarDB-X 1.0上執行
SHOW SEQUENCES,擷取當前PolarDB-X 1.0中的Sequence對象的狀態。 - 在目標PolarDB-X 1.0資料庫上通過
CREATE SEQUENCE命令建立新的Sequence對象。
- 在源PolarDB-X 1.0上執行
情境三:從PolarDB-X 1.0匯出資料到MySQL
從PolarDB-X 1.0匯出資料到MySQL,和在PolarDB-X 1.0之間相互匯入資料的過程類似,也分為以下幾個步驟。
- 從源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的相關參數代入命令中執行。 - 手動修改拆分表的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步。