全部產品
Search
文件中心

ApsaraDB RDS:RDS MySQL mysqldump選項設定

更新時間:Feb 28, 2024

GTID特性介紹

MySQL 5.6引入了GTID特性,因此5.6版本的mysqldump工具增加了set-gtid-purged選項。

選項名稱預設值可選值作用
set-gtid-purgedAUTOON|OFF|AUTO是否輸出 SET @@GLOBAL.GTID_PURGED 子句。
說明
  • ON:在mysqldump輸出中包含SET @@GLOBAL.GTID_PURGED語句。
  • OFF:在mysqldump輸出中不包含 SET @@GLOBAL.GTID_PURGED 語句。
  • AUTO:預設值。對於啟用了GTID的執行個體,會輸出 SET @@GLOBAL.GTID_PURGED語句;對於沒有啟動或者不支援GTID的執行個體,不輸出任何GTID相關資訊。
因此對於使用MySQL 5.6及以上版本內建的mysqldump工具匯出RDS MySQL 5.5版本執行個體資料時,需要設定set-gtid-purged為OFF,否則會報以下錯誤:
Error: Server has GTIDs disabled.
或者
mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’: Unknown system variable ‘GTID_MODE’ <1193>

避免表級鎖等待

mysqldump預設會啟用lock-tables選項,對要匯出的表加表級鎖,阻止表上的DML操作。

RDS MySQL執行個體預設支援的InnoDB和TokuDB引擎均支援事務,建議使用single-transaction選項進行匯出,而不要設定lock-all-tables或lock-tables選項。

選項名稱預設值可選值作用
lock-all-tablesFALSETRUE|FALSE在資料匯出期間設定global read lock,所有庫下的所有表在匯出期間為唯讀。自動關閉lock-tables和single-transaction選項。RDS不支援該選項。
lock-tablesTRUETRUE|FALSE匯出期間在匯出表上設定表級鎖。預設開啟。可以通過指定 skip-lock-tables選項來關閉。
single-transactionFALSETRUE|FALSE匯出操作被放置在一個事務中執行。自動關閉lock-tables選項。

更多表級鎖的內容請參見

設定匯出字元集

如果不指定,mysqldump預設使用UTF8字元集進行匯出。

選項名稱預設值可選值作用
default-character-setUTF8執行個體支援的字元集設定匯出的字元集。

其他匯出時需要注意的選項

選項名稱預設值可選值作用
no-defaultsNANA除了.mylogin.cnf,不讀取任何選項檔案。
defaults-file=file_nameNANA讀取指定的選項檔案。
add-drop-databaseFALSETRUE|FALSE在create database語句前增加drop database語句。
add-drop-tableTRUETRUE|FALSE在create table語句前增加drop table語句,預設開啟,使用選項skip-add-drop-table來關閉。
add-locksTRUETRUE|FALSE在表相關語句前後增加lock tables tab_name write和unlock tables語句。這樣在匯入資料時可以加快資料匯入。
compatible=nameNAansi|postgresql|oracle|mssql增強與指定的資料庫類型的相容性。
compactFALSETRUE|FALSE啟用skip-add-drop-table、skip-add-locks、skip-comments、skip-disable-keys、skip-set-charset 選項。
databasesTRUETRUE|FALSE匯出多個庫。預設mysqldump將第一個名字識別為庫,其後的名字識別為表。指定該選項後,mysqldump會將所有名稱識別為庫,並在每個庫前增加create database和use database語句。
disable-keysTRUETRUE|FALSE在插入資料前後增加/!40000 ALTER TABLE tab_name DISABLE KEYS / /!40000 ALTER TABLE tab_name ENABLE KEYS /語句來加速插入。該選項僅對 MyISAM 引擎表的非唯一索引有效。
eventsFALSETRUE|FALSE匯出資料庫內的計劃事件(定時任務)。
extended-insertTRUETRUE|FALSE使用擴充的Insert語句,一條Insert語句插入多行。
hex-blobFALSETRUE|FALSE以16進位匯出Binary、VarBinary、BLOB類型資料。如果跨版本遷移資料,建議增加該選項。
ignore-table=db.tabTRUETRUE|FALSE不匯出某表或視圖。格式:庫名.表名(db.tab)。可以多次使用該選項來忽略多張表。
max-allowed-packet24MB24MB-1GBmysqldump和RDS執行個體通訊緩衝最大值。預設24MB。最大1GB。
no-create-dbFALSETRUE|FALSE輸出中不包含create database語句。
no-create-infoFALSETRUE|FALSE輸出中不包含create table語句。
no-dataFALSETRUE|FALSE不匯出資料。
optTRUETRUE|FALSE啟用add-drop-table、add-locks、create-options、disable-keys、extended-insert、lock-tables、quick、set-charset,可以通過指定skip-opt選項關閉預設opt選項。
dump-dateTRUETRUE|FALSE如果指定了comments選項(預設開啟),在輸出的注釋中顯示匯出日期時間。
routinesFALSETRUE|FALSE匯出預存程序和函數(預設不匯出)。
result-fileTRUETRUE|FALSE將輸出重新導向到檔案。
set-charsetTRUETRUE|FALSE在匯出檔案中加上set names default_chararacter_set。
triggersTRUETRUE|FALSE匯出表上的Trigger。

RDS MySQL 不支援的選項

選項名稱預設值可選值作用
all-databasesFALSE執行個體支援的字元集匯出所有資料庫,包括 mysql。
flush-logsFALSETRUE|FALSE匯出前在執行個體中執行flush logs;命令。
flush-privilegesFALSETRUE|FALSE匯出MySQL系統庫後,輸出中包含flush privileges;命令。
lock-all-tablesFALSETRUE|FALSE在資料匯出期間放置global read lock,所有庫下的所有表在匯出期間為唯讀。自動關閉lock-tables和single-transaction選項。
tab=dir_nameNANA在指定的目錄下產生tbl_name.sql檔案(包含表建立語句)和以tab作為分隔字元的tbl_name.txt文字格式設定的資料檔案。

原因說明

  • all-databases:RDS MySQL普通使用者對MySQL庫中部分表沒有許可權,因此不能匯出全部庫表。

    錯誤資訊

    
    mysqldump: Couldn’t execute ‘show create table slow_log‘: SHOW command denied to user ‘xxx’@’xx.xx.xx.xx’ for table ‘slow_log’ (1142)
  • flush-logs: RDS MySQL普通使用者沒有reload許可權,因此不能執行flush logs;命令。

    錯誤資訊

    mysqldump: Couldn’t execute ‘FLUSH TABLES’: Access denied; you need (at least one of) the RELOAD privilege(s) for this operation (1227)
  • flush-privileges:RDS MySQL不支援MySQL系統庫的匯出,因此沒必要使用該選項。
  • lock-all-tables:RDS MySQL普通使用者沒有reload許可權,因此不能使用該選項。

    錯誤資訊

    mysqldump: Couldn’t execute ‘FLUSH TABLES’: Access denied; you need (at least one of) the RELOAD privilege(s) for this operation (1227)
  • tab=dir_name:該選項要求mysqldump和RDS MySQL執行個體在同一物理機上,因此不支援。但該選項可以和no-data選項搭配使用來擷取表的建立語句。
    # 和no-data選項搭配,擷取test庫下每個表的建立語句檔案tab_name.sql
    mysqldump  —no-defaults -uuser_name -ppass_word -hxxx.mysql.rds.aliyuncs.com -P3306 —set-gtid-purged=off —single-transaction —tab=/tmp —no-data test
    #  —no-daa 選希望匯出資料)時候的錯誤資訊:
    mysqldump  —no-defaults -uuser_name -ppass_word -hxxx.mysql.rds.aliyuncs.com -P3306 —set-gtid-purged=off —single-transaction —tab=/tmp test
    mysqldump: Got error: 1045: Access denied for user ‘xxx’@’%’ (using password: YES) when executing ‘SELECT INTO OUTFILE’