MySQL備份之mysqldump

mysqldumpmysql自帶的數據庫備份工具,屬於單線程,大部分生產環境的mysql數據庫備份都是使用該工具,mysqldump可以將數據導出爲原生sql語句,在將其數據導入至數據庫時,相當於是執行一遍備份文件中的所有sql語句,

mysqldump提供了豐富的options選項,可以在導出或者導入數據的時候,添加需要的options,以便達到用戶預期的效果

MySQL備份之mysqldump

mysql常用參數

// 導出全部數據庫。
// --all-databases , -A
mysqldump -uroot -p --all-databases

// 導出全部表空間。
// --all-tablespaces , -Y
mysqldump -uroot -p --all-databases --all-tablespaces

// 不導出任何表空間。
// --no-tablespaces , -y
mysqldump -uroot -p --all-databases --no-tablespaces

// 導出幾個數據庫。參數後面所有名字參量都被看作數據庫名。
// --databases, -B
mysqldump -uroot -p --databases [數據庫名1] [數據庫名2]

// 每個數據庫創建之前先添加drop數據庫語句(如有原庫則先drop後再重新create)。
// --add-drop-database
mysqldump -uroot -p --all-databases --add-drop-databas

// 每個數據表創建之前先添加drop數據表語句。(默認爲打開狀態,使用--skip-add-drop-table取消選項)。
// --add-drop-table
mysqldump -uroot -p --all-databases (默認添加drop語句)
mysqldump -uroot -p --all-databases –skip-add-drop-table (取消drop語句)

// 設置默認字符集,默認值爲utf8。
// --default-character-set
mysqldump -uroot -p --all-databases --default-character-set=latin1

// 使用十六進制格式導出二進制字符串字段。如果有二進制數據就必須使用該選項。影響到的字段類型有BINARY、VARBINARY、BLOB。
// --hex-blob
mysqldump -uroot -p --all-databases --hex-blob

// 使用具有多個VALUES列的INSERT語法。這樣使導出文件更小,並加速導入時的速度。默認爲打開狀態,使用--skip-extended-insert取消選項。
// --extended-insert, -e
mysqldump -uroot -p --all-databases
mysqldump -uroot -p --all-databases --skip-extended-insert (取消選項)

// 使用完整的insert語句(包含列名稱)。這麼做能提高插入效率,但是可能會受到max_allowed_packet參數的影響而導致插入失敗。
// --complete-insert, -c
mysqldump -uroot -p --all-databases --complete-insert

// 不緩衝查詢,直接導出到標準輸出。默認爲打開狀態,使用--skip-quick取消該選項。
// --quick, -q
mysqldump -uroot -p --all-databases
mysqldump -uroot -p --all-databases --skip-quick

// 該選項在導出數據之前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。
// 它只適用於多版本存儲引擎,僅InnoDB。本選項和--lock-tables 選項是互斥的,因爲LOCK TABLES 會使任何掛起的事務隱含提交。
// 要想導出大表的話,應結合使用--quick 選項。
// --single-transaction
mysqldump -uroot -p --all-databases --single-transaction

// 不導出指定的表。指定忽略多個表時,需要重複多次,每次一個表。每個表必須同時指定數據庫和表名。
// --ignore-table
例如:--ignore-table=database.table1 --ignore-table=database.table2 ……
mysqldump -uroot -p  --all-databases --ignore-table=mysql.user

2、生產中常用的參數
注意:下面每個場景都會列出多個命令,讀者根據生產的情況來參考

1.導出單庫

  • 格式:mysqldump -uroot -p [數據庫名]
mysqldump -uroot -p  [數據庫名] >/backup/[導出的文件名].sql.gz
mysqldump -uroot -p  [數據庫名] --single-transaction >/backup/[導出的文件名].sql.gz
mysqldump -uroot -p  [數據庫名]  --default-character-set=utf8 --set-gtid-purged=OFF --single-transaction >/backup/[導出的文件名].sql.gz

2.導出多個庫

  • 格式:mysqldump -uroot -p -B [數據庫名1] [數據庫名2]
    mysqldump -uroot -p  -B [數據庫名1] [數據庫名2] >/backup/[導出的文件名].sql.gz
    mysqldump -uroot -p  -B [數據庫名1] [數據庫名2] --single-transaction >/backup/[導出的文件名].sql.gz
    mysqldump -uroot -p -B [數據庫名1] [數據庫名2] --default-character-set=utf8 --set-gtid-purged=OFF --single-transaction >/backup/[導出的文件名].sql.gz

3.導出單個表

  • 格式:mysqldump -uroot -p [數據庫名] [表名]
mysqldump -uroot -p  [數據庫名] [表名] >/backup/[導出的文件名].sql.gz
mysqldump -uroot -p  [數據庫名] [表名] --single-transaction >/backup/[導出的文件名].sql.gz
mysqldump -uroot -p  [數據庫名] [表名]  --default-character-set=utf8 --set-gtid-purged=OFF --single-transaction >/backup/[導出的文件名].sql.gz

4.導出多個表

  • 格式:mysqldump -uroot -p [數據庫名] [表名1] [表名2]
mysqldump -uroot -p  [數據庫名] [表名1] [表名2] >/backup/[導出的文件名].sql.gz
mysqldump -uroot -p  [數據庫名] [表名1] [表名2] --single-transaction >/backup/[導出的文件名].sql.gz
mysqldump -uroot -p [數據庫名] [表名1] [表名2] --default-character-set=utf8 --set-gtid-purged=OFF --single-transaction >/backup/[導出的文件名].sql.gz

5.導入和導出大表

mysqldump -uroot -p --default-character-set=utf8 --quick \
--extended-insert --single-transaction [數據庫名] |gzip >/backup/[導出的文件名].sql.gz

gzip按照需求來定,主要是對導出的sql數據的壓縮

6.過濾庫中的表後在導出

mysqldump -uroot -p --ignore-table=[數據庫名.表名1] --ignore-table=[數據庫名.表名2] >/backup/[導出的文件名].sql.gz

在過濾庫中的表後導出的數據的時候,是不需要單獨指定庫名的,只需要把需要過濾的庫下對應的表填上,它就會自動的把那些填上庫對應的表給過濾,將那些沒有被過濾的表中的數據導出到指定文件中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章