天天看點

RDS for MySQL Mysqldump 常見問題和處理RDS for MySQL Mysqldump 常見問題和處理

<a href="#1">gtid 特性相關</a>

<a href="#2">避免表級鎖等待</a>

<a href="#3">設定導出字元集</a>

<a href="#4">其他導出時需要注意的選項</a>

<a href="#5">舉例</a>

<a href="#6">rds for mysql 不支援的選項</a>

<a href="#7">rds for mysql 邏輯備份</a>

mysql 5.6 引入了 gtid 特性,是以随 5.6 版本分發的 mysqldump 工具增加了 --set-gtid-purged 選項。

#

選項名稱

預設值

可選值

作用

1

set-gtid-purged

auto

on, 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 for mysql 執行個體資料導出時設定該選項為 off。

注:

如果 mysqldump 設定 set-gtid-purged=on  從 rds for mysql 5.5 或 5.1 版本執行個體導出資料,mysqldump 會提示下面的錯誤:

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

rds for mysql 執行個體預設支援的 innodb 和 tokudb 引擎均支援事務,建議使用  single-transaction 選項進行導出,而不要設定 lock-all-tables 或 lock-tables 選項。

lock-all-tables

false

false,true

在資料導出期間放置 global read lock,所有庫下的所有表在導出期間為隻讀。自動關閉 lock-tables 和 single-transaction 選項。rds 不支援該選項。

2

lock-tables

true

導出期間在導出表上放置表級鎖。預設開啟。可以通過指定 --skip-lock-tables 選項來關閉。

3

single-transaction

導出操作被放置在一個事務中執行。自動關閉 lock-tables 選項。

關于表級鎖的情況,請參考:rds for mysql innodb表級鎖等待

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

default-character-set

utf8

執行個體支援的字元集

mysqldump 到 rds 執行個體導出連接配接的字元集

no-defaults

na

除了.mylogin.cnf,不讀取任何選項檔案

defaults-file=file_name

讀取指定的選項檔案

add-drop-database

在 create database 語句前增加 drop database 語句

4

add-drop-table

在 create table 語句前增加 drop table 語句,預設開啟,使用選項 --skip-add-drop-table 來關閉。

5

add-locks

在表相關語句前後增加 lock tables tab_name write; 和 unlock tables; 語句。這樣在導入資料時可以加快資料導入。

6

compatible=name

ansi,postgresql,

oracle,mssql

增強與指定的資料庫類型的相容性

7

compact

啟用 --skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys, --skip-set-charset 選項

8

databases

導出多個庫。預設 mysqldump 将第一個名字識别為庫,其後的名字識别為表。指定該選項後,mysqldump會将所有名稱識别為庫,并在每個庫前增加 create database 和 use database 語句。

9

disable-keys

在插入資料前後增加 /!40000 alter table tab_name disable keys / 和 /!40000 alter table tab_name enable keys / 語句來加速插入。該選項僅對 myisam 引擎表的非唯一索引有效。

10

events

導出資料庫内的計劃事件(定時任務)

11

extended-insert

使用擴充的 insert 語句,一條 insert 語句插入多行。

12

hex-blob

以16進制導出 binary、varbinary、blob 類型資料。

如果跨版本遷移資料,建議增加該選項。

13

ignore-table=db.tab

不導出某表或視圖。格式:庫名.表名(db.tab)。可以多次使用該選項來忽略多張表。

14

max-allowed-packet

24 mb

24 mb - 1 gb

mysqldump 和 rds 執行個體通信緩存最大值。預設24 mb。最大 1 gb。

15

no-create-db

輸出中不包含 create database 語句

16

no-create-info

輸出中不包含 create table 語句

17

no-data

不導出資料

18

opt

啟用  --add-drop-table, --add-locks, --create-options --disable-keys, --extended-insert, --lock-tables, --quick, --set-charset; 可以通過指定 skip-opt 選項關閉預設 opt 選項。

19

dump-date

如果指定了 --comments 選項(預設開啟),在輸出的注釋中顯示導出日期時間。

20

routines

導出存儲過程和函數(預設不導出)

21

result-file

将輸出重定向到檔案

22

set-charset

在導出檔案中加上 set names default_chararacter_set

23

triggers

導出表上的 trigger

all-databases

false, true

導出所有資料庫,包括 mysql

flush-logs

導出前在執行個體中執行 flush logs; 指令

flush-privileges

導出 mysql 系統庫後,輸出中包含 flush privileges; 指令

在資料導出期間放置 global read lock,所有庫下的所有表在導出期間為隻讀。自動關閉 lock-tables 和 single-transaction 選項。

tab=dir_name

在指定的目錄下生成 tbl_name.sql 檔案(包含表建立語句)和 以 tab 作為分隔符的tbl_name.txt文本格式的資料檔案。

--all-databases: rds for mysql 普通使用者對 mysql 庫中部分表沒有權限,是以不能導出全部庫表。

--flush-logs: rds for mysql 普通使用者沒有 reload 權限,是以不能執行 flush logs; 指令。

--flush-privileges:因為 rds for mysql 不支援 mysql 系統庫的導出,是以沒必要使用該選項。

--lock-all-tables:因為 rds for mysql 普通使用者沒有 reload 權限,是以不能使用該選項。

--tab=dir_name:該選項要求 mysqldump 和 rds for mysql 執行個體在同一實體機上,是以不支援。但該選項可以和 --no-data 選項搭配使用來擷取表的建立語句。

rds for mysql 支援執行個體和單庫級别的邏輯備份。

邏輯備份執行期間不會影響主執行個體的正常使用。

邏輯備份導入權限問題請參考:rds for mysql權限問題(錯誤代碼:1227,1725)