PolarDB-X 1.0支持MySQL官方數(shù)據(jù)導(dǎo)出工具mysqldump。本文將介紹如何使用mysqldump導(dǎo)入導(dǎo)出PolarDB-X 1.0的數(shù)據(jù)。

注意事項(xiàng)

  • 關(guān)于mysqldump命令的詳細(xì)說明,請(qǐng)參見MySQL 官方文檔
  • mysqldump適合小數(shù)據(jù)量(低于1000萬)的離線導(dǎo)入導(dǎo)出。如果需要完成更大數(shù)據(jù)量或者實(shí)時(shí)的數(shù)據(jù)遷移任務(wù),請(qǐng)參考阿里云提供的從自建MySQL遷移至PolarDB-X

場(chǎng)景一:從MySQL中導(dǎo)出數(shù)據(jù)到文本文件

  1. 從MySQL中導(dǎo)出數(shù)據(jù)到文本文件。
    輸入如下命令,從MySQL導(dǎo)出表結(jié)構(gòu)和數(shù)據(jù)(假設(shè)導(dǎo)出文件為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. 參數(shù)說明
    參數(shù)名 說明 是否必選
    ip MySQL的IP。 ??
    port MySQL的端口。 ?
    user MySQL的用戶名。 ??
    password MySQL的密碼,注意前面有個(gè) -p,之間沒有空格。 ??
    char-set 指定的編碼。 ??
    --hex-blob 使用十六進(jìn)制格式導(dǎo)出二進(jìn)制字符串字段。如果有二進(jìn)制數(shù)據(jù)就必須使用本選項(xiàng)。影響的字段類型包括 BINARY、VARBINARY、BLOB。 ?
    --no-data 不導(dǎo)出數(shù)據(jù)。 ?
    table 指定導(dǎo)出某個(gè)表。默認(rèn)導(dǎo)出該數(shù)據(jù)庫所有的表。 ?
  2. 修改建表語句。

    從MySQL導(dǎo)出的數(shù)據(jù)文件包含每個(gè)表的建表語句。如果直接在PolarDB-X 1.0上執(zhí)行這些建表語句,會(huì)在PolarDB-X 1.0上建立一個(gè)單表。如果要對(duì)某個(gè)表進(jìn)行分庫分表,那么需要手動(dòng)對(duì)建表語句進(jìn)行修改,PolarDB-X 1.0建表語句的語法請(qǐng)參考CREATE TABLE

  3. 導(dǎo)入數(shù)據(jù)文件到PolarDB-X 1.0。您可以通過如下兩種方式的任意一種導(dǎo)入數(shù)據(jù)文件到PolarDB-X 1.0
    • 通過mysql -h ip -P port -u user --default-character-set=char-set命令登錄目標(biāo)PolarDB-X 1.0,執(zhí)行source /yourpath/dump.sql命令將數(shù)據(jù)導(dǎo)入到目標(biāo)PolarDB-X 1.0
      說明 該方式會(huì)把所有的步驟回顯到屏幕上,速度略慢,但是可以觀察導(dǎo)入過程。
    • 直接通過mysql -h ip -P port -u user --default-character-set=char-set< /yourpath/dump.sql命令將數(shù)據(jù)導(dǎo)入到目標(biāo)PolarDB-X 1.0
    說明
    • 上述兩個(gè)命令中default-character-set要設(shè)置成實(shí)際的數(shù)據(jù)編碼。如果是Windows平臺(tái),SOURCE命令指定的文件路徑需要對(duì)分隔符轉(zhuǎn)義。
    • 導(dǎo)入的時(shí)候,由于某些PolarDB-X 1.0和MySQL實(shí)現(xiàn)上的不同,可能會(huì)報(bào)錯(cuò)(如ERROR 1231 (HY000): [a29ef6461c00000][10.117.207.130:3306][****]Variable @saved_cs_client can't be set to the value of @@character_set_client)。此類錯(cuò)誤信息并不影響導(dǎo)入數(shù)據(jù)的正確性。

場(chǎng)景二:從一個(gè)PolarDB-X 1.0導(dǎo)入到另一個(gè)PolarDB-X 1.0

假設(shè)您之前有一個(gè)測(cè)試環(huán)境的PolarDB-X 1.0,測(cè)試完畢以后,需要把測(cè)試過程中的一些表結(jié)構(gòu)和數(shù)據(jù)導(dǎo)入到生產(chǎn)環(huán)境的PolarDB-X 1.0中,那么可以按照如下步驟進(jìn)行操作。

  1. 從源PolarDB-X 1.0中導(dǎo)出數(shù)據(jù)到文本文件。
  2. 導(dǎo)入數(shù)據(jù)文件到PolarDB-X 1.0。請(qǐng)參考場(chǎng)景一第3步。
  3. 手動(dòng)創(chuàng)建Sequence對(duì)象。
    mysqldump并不會(huì)導(dǎo)出PolarDB-X 1.0中的Sequence對(duì)象,所以如果在源PolarDB-X 1.0中使用了Sequence對(duì)象,并且需要在目標(biāo)PolarDB-X 1.0中繼續(xù)使用相同的Sequence對(duì)象,則需要手動(dòng)在目標(biāo)PolarDB-X 1.0中創(chuàng)建同名的Sequence的對(duì)象。具體步驟如下:
    1. 在源PolarDB-X 1.0上執(zhí)行SHOW SEQUENCES,獲取當(dāng)前PolarDB-X 1.0中的Sequence對(duì)象的狀態(tài)。
    2. 在目標(biāo)PolarDB-X 1.0數(shù)據(jù)庫上通過CREATE SEQUENCE命令創(chuàng)建新的Sequence對(duì)象。

場(chǎng)景三:從PolarDB-X 1.0導(dǎo)出數(shù)據(jù)到MySQL

PolarDB-X 1.0導(dǎo)出數(shù)據(jù)到MySQL,和在PolarDB-X 1.0之間相互導(dǎo)入數(shù)據(jù)的過程類似,也分為以下幾個(gè)步驟。

  1. 從源PolarDB-X 1.0中導(dǎo)出表結(jié)構(gòu)和數(shù)據(jù)。
    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
    說明 請(qǐng)將PolarDB-X 1.0的相關(guān)參數(shù)代入命令中執(zhí)行。
  2. 手動(dòng)修改拆分表的DDL語句。
    PolarDB-X 1.0中拆分表的建表語句和MySQL并不兼容。為了后續(xù)導(dǎo)入到MySQL中,需手動(dòng)修改導(dǎo)出的SQL文件,刪除以下關(guān)鍵字:
    • DBPARTITION BY hash(partition_key):
    • TBPARTITION BY hash(partition_key):
    • TBPARTITIONS N
    • BROADCAST
    例如一個(gè)拆分表語句導(dǎo)出如下:
    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. 導(dǎo)入修改以后的文件。請(qǐng)參見場(chǎng)景一第3步。