MySQL數據庫備份命令mysqldump參數詳解
-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.
-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 都會將該選項關閉。
--single-transaction
--single-transaction 可以得到一致性的導出結果。他是通過將導出行為放入一個事務中達到目的的。
它有一些要求:只能是 innodb 引擎;導出的過程中,不能有任何人執行 alter table, drop table, rename table, truncate table等DDL語句。
--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參數詳解