1. 程式人生 > >MySQL數據庫備份命令mysqldump參數詳解

MySQL數據庫備份命令mysqldump參數詳解

mysql數據庫 creat 空間 表鎖 數據 insert for meta r語

mysqldump對於MySQL數據庫備份是有一個很好用的命令,並且是MySQL自帶的。
-d:只備份表結構,備份文件是SQL語句形式;只備份創建表的語句,插入的數據不備份。

-t:只備份數據,數據是文本形式;表結構不備份

-T [--tab]:表結構與數據分離,表結構為sql文件,數據為普通文件

-A:導出所有數據庫

-B:導出指定數據庫

-x, --lock-all-tables: 鎖表
鎖表原理:從執行定時備份腳本起(帶-x參數),不能往表裏更新,但是缺點,鎖表後無法更新,如果單庫一般在低谷,比如淩晨後半夜裏;多庫,就從從庫裏鎖表備份(並且從庫不對外,只做備份)
Locks all tables across all databases. This is achieved by taking a global read lock for the duration of the whole dump.

Automatically turns --single-transaction and --lock-tables off. 啟用該選項,會自動關閉 --single-transaction 和 --lock-tables.

-l, --lock-tables: 只讀鎖表
Lock all tables before dumping them
Lock all tables for read.
(Defaults to on; use --skip-lock-tables to disable.)
該選項默認打開的,上面已經說到了。它的作用是在導出過程中鎖定所有表。--single-transaction 和 --lock-all-tables 都會將該選項關閉。

在用LOCK TABLES給表顯式加表鎖時,必須同時取得所有涉及到表的鎖,也就是說,在執行LOCK TABLES後,只能訪問顯式加鎖的這些表,不能訪問未加鎖的表;同時,如果加的是讀鎖,那麽只能執行鎖表的查詢操作,MyISAM總是一次獲得SQL語句所需要的全部鎖。這也正是MyISAM表不會出現死鎖(Deadlock Free)的原因。

--single-transaction
--single-transaction 可以得到一致性的導出結果。他是通過將導出行為放入一個事務中達到目的的。
它有一些要求:只能是 innodb 引擎;導出的過程中,不能有任何人執行 alter table, drop table, rename table, truncate table等DDL語句。

實際上DDL會被事務所阻塞,因為事務持有表的metadata lock 的共享鎖,而DDL會申請metadata lock的互斥鎖,所以阻塞了。
--single-transaction 會自動關閉 --lock-tables 選項;上面我們說到mysqldump默認會打開了--lock-tables,它會在導出過程中鎖定所有表。
因為 --single-transaction 會自動關閉--lock-tables,所以單獨使用--single-transaction是不會使用鎖的。與 --master-data 合用才有鎖。

-q: 不做緩沖查詢,直接導到標準輸出

-R:導出存儲過程和函數

-E,--events:導出調度事件

--add-drop-database
在CREATE DATABASE語句前增加DROP DATABASE語句,一般配合--all-databases 或 --databases使用,因為只有使用了這二者其一,才會記錄CREATE DATABASE語句。

--add-drop-table
在CREATE TABLE語句前增加CREATE TABLE語句。

--add-drop-trigger
在CREATE TRIGGER語句前增加DROP TRIGGER語句

--all-tablespaces, -Y
導出全部表空間。該參數目前僅用在MySQL Cluster表上(NDB引擎)

--add-locks
在每個表導出之前增加LOCK TABLES並且之後UNLOCK TABLE。(默認為打開狀態,使用--skip-add-locks取消選項)

--opt
等同於--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 該選項默認開啟, 可以用--skip-opt禁用.

-F,--flush-logs:刷新binlog日誌

--master-data
mysqldump導出數據時,當這個參數的值為1的時候,mysqldump出來的備份文件就會包括CHANGE MASTER TO這個語句,CHANGE MASTER TO後面緊接著就是file和position的記錄,在slave上導入數據時會執行該語句,salve就會根據CHANGE MASTER TO後面指定的binlog文件和binlog日誌文件裏的位置點,從master端復制binlog。默認情況下這個值是1 。運維經常使用到該參數,主從復制時,該參數是一個很好的功能,同時也可以做增量恢復。
當這個參數的值為2的時候mysqldump導出來的備份文件也會包含CHANGE MASTER TO語句,但是該語句被註釋掉,不會生效,只是提供一個信息。
--master-data也會刷新binlog日誌。

MySQL數據庫備份命令mysqldump參數詳解