mysqldump命令使用詳解

  mysqldump是一個數據庫備份程序mysql

  用法:mysqldump [options] [db_name [tbl_name ...]]算法

  描述:mysqldump是一個客戶端邏輯備份的工做,備份的SQL文件能夠在其餘MySQL服務器上進行還原。sql

    如需備份,則至少須要對該表的select權限,須要備份視圖則須要改帳戶具備SHOW VIEW權限,觸發器須要TRIGGER。如需鎖表,則不可以使用--single-transaction選項。其餘權限暫未列出。shell

    如需還原,則須要對應的執行權限,如create表,則須要對該庫的create權限。數據庫

    mysqldump導出能夠包括ALTER DATABASE與相關更改,其中包括導出元數據、更改字符編碼,在導入對應文件時,相應的權限更改也會發生影響。安全

    若是在服務器上備份的表均爲MyISAM,也可使用mysqlhotcopy來完成任務。服務器

    注意:若是在Windows環境下使用默認shell,則重定向輸出的文件爲UTF-16編碼。  shell> mysqldump [options ] > dump.sql架構

      然而,UTF-16是一個不容許被鏈接的字符集(參見10.1.5單元,‘Connection Character Sets and Collations’),因此導出文件不能被正常加載使用。爲了解決這個問題,使用--result-file選項,建立ASCII格式文件:  shell> mysqldump [options] --result-file=dump.sqloracle

    從性能和伸縮性考慮,mysqldump的優點包括:在輸出以前能夠很方便的查看或編輯文件,你還能夠克隆數據庫與DBA的工做,或者將生產環境下的數據進行微小測試。這不是做爲快速備份或可伸縮性很強的方案。即針對不一樣大小的數據須要安排合理時間,在須要還原時速度並不快,由於須要從新進行I/O、建立索引等。app

    對於大量數據來講,物理備份可能更爲合適,由於他能夠快速還原。

    ·若是你的表以Innodb引擎爲主,能夠考慮使用MySQL的mysqlbackup命令。由於他提供了最好的Innodb備份:它也能夠備份其餘如MyIsAM與其餘存儲引擎;提供了更多的備份參數進行選擇。詳情見手冊 25.2 「MySQL Enterprise Backup Overview」

    ·若是你的表以MyISAM引擎爲主,能夠考慮使用mysqlhotcopy來替代,它可能比mysqldump表現更爲好,詳情見mysqlhotcopy手冊。

    mysqldump能夠行級導出數據,或者也能夠將整個表載入內存一次性導出,若是將全部數據導入內存可能會面臨內存緩衝區不夠的問題。若是要行級導出數據,使用--quick選項(或者--opt,它支持--quick)。--opt選項是默認選項,因此爲了保證內存緩衝區,使用--skip-quick。

    若是你使用高版本的mysqldump來備份一個低版本的MySQL服務器中的數據,使用--skip-opt代替--opt或者-- extended-insert選項。

    關於mysqldump的更多信息,要參照手冊7.4單元「Useing mysqldump for Backups」 這裏列出幾個經常使用選項:備份一個或多個表,備份一個完整的數據庫,備份一臺MySQL服務器上全部數據庫

      >shell mysqldump [options] db_name [tbl_tables ...]

      >shell mysqldump [options] --databases db_name ...

      >shell mysqldump [options] --all-databases

    備份整個數據庫時,不要使用name與tables,直接指定db_name 或使用 --databases 或 --all-databases

    mysqldump默認不會備份INFORMATION_SCHEMA與performance_schema數據庫。若是要備份這些內容,須要在指定使用--skip-lock-tables選項。你也能夠指定使用--databases時指定數據庫名稱。在MySQL5.5以前,及時你指定了,mysqldump也不會備份上述內容。

    mysqldump不會備份performance_schema數據庫。

    在MySQL5.5.25版本以前,mysqldump不會備份mysql庫的general_log 或 slow_query_log表。在5.5.25,備份文件包括重建指令。表中log內容不會備份。

    mysqldump也不會備份MySQL集羣nbinfo數據庫信息。

    可使用mysqldump --help命令查看選項列表。

    一下有一些選項組的縮寫:

      ·使用--opt指令至關於--add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, a和 --set-charset,以上這些選項是默認的,由於--opt是默認使用的選項。

      ·使用--compact至關於同事使用--skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys, 和 --skip-set-charset。

    爲了避免影響選項組其餘選項,使用該組的 --skip-xxx from(--skip-opt或--skip-compack)他也能夠選擇選項組內的一些選項,例如一下:

      ·若是須要選擇--opt選項組不生效的選項,使用--skip加選項。爲了不寫入內存,使用--opt --skip-extend-insert --skip-quick(通常 --skip-extend-insert --skip-quick默認禁用,由於--opt默認啓用)

      · 逆轉——選擇除了索引禁用全部功能和表鎖定,使用--skip-opt --disable-keys --lock-tables

    當須要啓用或禁止選項組中某些特定的選項,指定就顯得十分重要了,由於這些選項會在進程運行時始終生效。好比說,--disable-keys --lock-tables --skip-opt將不會做用。這就像--skip-opt做用於他自身。

  接下來講一下mysqldump的選項:

    · --help:顯示幫助信息並退出程序

    · --add-drop-databases:在CREATE DATABASE以前寫入drop databases。這個選項一般是配合--all-databases或--database使用,由於CREATE DATABASE語句執行時至少選定一個選項。

    · --add-drop-table:在每一條CREATE TABLE以前寫入DROP TABLE命令

    · --add-drop-tigger:在每一條CREATE TIGGER以前寫入DROP TIGGER。注意:這個選項只有mysqldump做爲MySQL集羣時提供。

    · --add-locks:在備份時進行鎖表,備份完釋放表鎖。這樣能夠避免快速寫入數據形成髒讀。

    · --all-databases, -A :備份全部庫中的全部表,效果等同於--database 後跟隨全部庫名。

    · --all-tablespaces, -Y:使用NDBCLUSTER表來爲全部的表備份語句添加表空間。這些信息是不包含在,mysqldump的輸出。這個選項只有MySQL集羣目前相關表。

    · --allow-keywords:容許使用關鍵詞做爲列名,可是會在列名以前加上表名做爲前綴。

    · --apply-slave-statements:在MySQL5.5.3以後添加的選項,在從服務器上使用--dump-slave,在備份時中止從主服務器上備份數據。

    · -- bind-address=ip_address:在一臺主機上有多個網卡設備時,選擇其中一塊指定網卡鏈接MySQL服務器。這個選項僅支持mysqldump版本支持的MySQL集羣,在5.5穩定版中還不支持。

    · --character-sets-dir=dir_name:文件夾將使用安裝數據庫的字符集。

    · --comments,-i:默認會將MySQL版本,服務器版本,主機信息等添加到備份文件中。若是不須要這些信息,可使用--skip-comments。

    · --compact:輸出更多的相關信息,這個選項支持使用--skip-drop-tables --skip-add-locks --skip-comments --skip-disable-keys --skip-set-charset選項。

    · --compatible=name:生成兼容其餘版本數據庫的備份文件。name能夠爲ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options, or no_field_options.若是須要填寫多個時,使用‘,’分隔,備份文件會針對不一樣版本進行制定的SQL模式。

    這個選項並不能保證與其餘服務器的兼容性。它只容許那些當前可用的SQL模式值進行轉儲輸出更多的兼容。例如,-compatible=ORACLE不兼容數據類型映射到oracle類型或使用Oracle語法置評。

    此選項要求MySQL版本4.1.0以上

    · --complete-insert,-c:在INSERT語句時包含列名。

     · --compress,-C:在客戶端與服務器都支持的壓縮算法中,選擇壓縮數據進行通訊。

     · --create-options:在CREATE TABLE語句包含全部表選項。

    · --database,-B:備份制定數據庫。通常來講,mysqld對待name參數時,第一個參數做爲數據庫名,緊隨其後的做爲表名。可是在使用這個選項時,會將全部name參數做爲數據庫名進行備份。在每個數據庫備份前都會添加CREATE DATABASE 與 USE指令。

    · --debug=[debug_options],-# [debug_options] :寫入debug日誌,經常使用debug_options使用字符串 d:t:o,filen_ame,默認值爲d:t:o,/tmp/mysqldump.trace

    · --debug-check:在程序退出時打印debug信息。

    · --debug_info:在程序退出時打印內存、CPU使用狀態至debug信息中。

    · --default-auth=plugin:對客戶端身份驗證插件的使用提示。此特性5.5.9開始加入。

    · --default- character-set=charset_name:使用charset_name做爲字符集。

    · -- defaults-extra-file=file_name:讀取選項文件做爲全局選項(Unix環境),並在用戶選項以前生效。若是文件不存在或因爲權限導致沒法訪問,則會產生錯誤。在MySQL5.5.8以前必須使用絕對路徑。5.5.8以後可使用相對路徑。

    · --defaults-file=file_name:僅使用默認選項文件。若是文件不存在或因爲權限導致沒法訪問,則會產生錯誤。在MySQL5.5.8以前必須使用絕對路徑。5.5.8以後可使用相對路徑。

    · --defaults-group-suffix=str:Read不只使用一般的組名,並且也支持定義組別名。舉例:mysqldump一般會讀取[client]與[mysqldump]的組。若是給出了--defaults-group-suffix=str,mysqldump也會讀取[client_ohter]與[mysqldump_other]組。

    · --delayed-insert:在INSERT時會使用INSERT DELAYED

    · --delete- mastelogs:在主從架構中,會使用PURGE BINARY LOG指令來刪除主服務器中的從服務器備份的二進制日誌。這個選項會自動啓用 --master-data

    · --disable-keys,-K:在每個表中的INSERT都會使用 /*!40000 ALTER TABLE tbl_name DISABLE KEYS */  /*!40000 ALTER TABLE tbl_name ENABLE KEYS */包起來。這樣可使得還原時速度更快,由於索引信息在全部INSERT操做以後纔會創建,這個選項只會影響MyISAM表的 nonunique 索引,對其餘引擎不生效。

    · --dump-date:若是給出了--comments選項,mysqldump會在備份文件的結尾處添加-- Dump completed on DATE。然而,因爲在備份時,會消耗時間因此爲產生不一樣的日期。--dump-date與--skip-dump-date控制如何記錄日期,默認爲--dump-date,日期包含在 comment中,--skip-dump-date支持阻止時間打印。

    · --dump-slavel=[value]:這個選項與--master-data類似(除包含主從關係外),它會引發備份輸出至從服務器的二進制日誌(包含有CHANGE MASTER TO指令)主服務器則會替換。

    --dump-slave:協調主從服務器就像使用--master-data選項。可是會引發--master-data失效。這個選項的值像是掛起--master-data的行爲(不傳入值或者1,CHANGE MASTER TO,設置爲2會致使SQL被包起來)並且與之具備相同效應。這個選項會引發mysqldump在備份前中止中止slave SQL線程,然後重啓。也能夠結合--dump-slave --applay-slave-statements 與 --include-master-host-port使用。此特性在MySQL5.5.3被引入。

    · --events,-E:使用事件調度器完成備份,可是須要數據庫相關權限。

    · -- extended-insert, -e:會使用列表寫入INSERT,即一條語句插入多個值,這樣會是備份文件更小。

    · --fields-terminated-by=..., --fields-enclosed-by=..., --fields-optionally-enclosed-by=..., --fields-escaped-by=...:這些選項配合使用--tab選項卡並且要具有對應含義的FIELDS列做爲LOAD TATA INFILE

    · --first-slave:已棄用!使用--lock-all-tables代替。 此指令在MySQL5.5.3被啓用。

    · --flush-logs,-F:在備份前刷新MySQL服務器的日誌,此選項須要RELOAD權限。若是你在--all-databases情景下使用此選項,則會在每一個數據庫時刷新logs。 --lock-all-tables, --master-data, or (as of MySQL 5.5.21) --single-transaction時:日誌只會被刷新一次,執行時會加表鎖。若是你想在備份時刷新日誌,--lock-all-tables, --master-data, or --single-transaction.配合此選項使用。

    · --flush-privileges:在備份文件中添加執行FLUSH PRIVILEGES指令。若是你須要備份mysql庫來回復某些權限時應當使用此選項。

    · --force,-f:及時在備份表出現錯誤時依然繼續執行。這個選項的使用場景之一是:在備份時出現錯誤,由於表已被刪除。若是不使用此選項,mysqldump則會存在錯誤信息。若是使用,則會將錯誤信息打印出來後繼續執行SQL指令。

    · --enable-cleartext-plugin:開啓cleartext插件。此特性在MySQL5.5.7時引入。

    · --host=name,-h host_name:從給出的主機名備份,若是沒給出,則默認爲localhost

    · --hex-blob:包含有二進制信息的列將會由十六進制輸出(好比,‘abc’,將會輸出爲 0x616263,受影響的數據類型:BINARY, VARBINARY, the BLOB types, and BIT

    · --include-master-host-port:在從服務器上的CHANGE MASTER TO 指令將會由--dump-slave選項備份,MASTER_HOST,MASTER_PORT指TCP/IP端口。此特性在MySQL5.5.3引入

    · --ignore-table=db_name.tbl_name:忽略要被備份的表,若是忽略多個則須要使用屢次此選項,此選項還能夠忽略VIEW。

    · --insert-ignore:使用INSERT IGNORE 代替INSERT

    · --lines-terminated-by=...:這個選項在LOAD DATA INFILE使用對應意義的--tab做爲LINES列

    · --lock-all-tables, -x:在備份時添加全局鎖。此選項會自動關閉--single-transaction and --lock-tables.

    · --lock-tables, -l:對於每一個數據庫,都會在備份以前鎖全部表。在MyISAM表會施加READ LOCAL。對於Innodb這種帶有事物的引擎,--single-transaction多是更好的選擇。

    · --log-error=file_name:將錯誤記錄到指定file_name,默認不記錄。

    · --master-data[=value]:使用此選項能夠將主服務器轉儲爲備份文件,使用另一臺服務器還原時依然能夠做爲主服務器。可是這些服務器應該是從服務器還原以後再還原主服務器。若是選項值是2,CHANGE MASTER TO 被編寫爲一個SQL註釋,所以只是信息;它轉儲文件還原時沒有影響。若是選項值是1,該聲明是沒有寫評論和生效當轉儲文件從新加載。若是沒有指定選項值,默認值是1。此選項要求具有 RELOAD並且要開啓二進制日誌。

    --master-data選項會默認關閉--lock-tables,並且默認打開 --lock-all-tables,可是 --lock-all-tables除外。在一種狀況下:在開始備份前會須要一些時間添加全局讀鎖。如論如何,logs會詳細記錄dump時刻。

    若是備份的主服務器含有從服務器時,也可能創建一個從服務器。在MySQL5.5.3或以上版本時,你可使用--dump-slave,可是若是同時存在時會覆蓋--master-data選項。在MySQL5.5.3以前,使用以下規則來備份:

      1.中止從服務器獲取當前狀態 

        mysql> STOP SLAVE SQL_THREAD;
        mysql> SHOW SLAVE STATUS;

      2.從SHOW SLAVE STATUS指令輸出的內容中與主服務器對應的新從服務器的二進制日誌應該開始替換Relay_Master_Log_File and Exec_Master_Log_Pos表示file_name與file_pos

      3.備份從服務器

        shell> mysqldump --master-data=2 --all-databases > dumpfile

      4.重啓從服務器

        mysql> START SLAVE;

      5.在新的從服務器上導入數據

        shell> mysql < dumpfile

      6.在新的從服務器上設置主服務器信息

        mysql> CHANGE MASTER TO

          -> MASTER_LOG_FILE = 'file_name', MASTER_LOG_POS = file_pos;

        CHANGE MASTER TO指令可能還須要其餘參數,好比MASTER_HOST指向當前從服務器對應的主服務器。添加其餘必要參數

    · --no-autocommit:在執行INSERT時關閉自動提交,即autocommit = 0 ,使用 COMMIT

    · --no-create-db, -n:在給出--databases 或 --all-databases選項時,不執行CREATE DATABASE 指令

    · --no-create-info, -t:在建立備份的表示,不執行CREATE TABLE。注意:不過此選項不排除mysqldump時會在日誌文件中記錄文件組與表空間,但是,你可使用--no-tablespaces來完成。

    · --no-data, -d:不會在表中記錄信息。這就在你只想CREATE TABLE時就頗有用了(好比,只想備份表結構)

    · --no-defaults:不讀取選項文件,若是程序由於讀取未知文件而失敗可使用此選項避免讀取。

    · --no-set-names, -N:此選項與--skip-set-charset.效果相同。

    · --no-tablespaces, -y:CREATE LOGFILE GROUP與CREATE TABLESPACE指令不會被寫進備份文件。

    · --opt:至關於 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset,它提供了一個快速備份和還原的功能。

    · --order-by-primary:備份表時會根據主鍵或第一個不重複的索引排序。若是索引存在,這就使得從一個MyISAM表向Innodb表導入時很方便了,不過這也會使備份時須要計算的時間更長。

    · --password[=password], -p[password]:鏈接數據庫的密碼。若是使用短標籤時,在密碼與p之間不要有空格,若是你省略了password的值,mysqldump會提示輸入。爲了安全起見,固然你也能夠在選項文件中提供,避免使用時輸入。

    · --pipe, -W:在Windows中,是經過管道鏈接MySQL服務器。這個選項提供了只有MySQL服務器提供的管道鏈接。

    · --plugin-dir=dir_name:你插件的文件夾。若是--default-auth時,mysqldump不會去尋找。

    ·--port=port_num, -P port_num:TCP/IP使用的端口號。

    · --print-defaults:在輸出的文件中打印程序名與選項。

    · --protocol={TCP|SOCKET|PIPE|MEMORY}:使用此選項你能夠指定傳輸方式。

    · --quick, -q:在備份數據量比較大的表時有用。會將數據讀入內存,在輸出完成以前會存在內存緩衝區。

    · --quote-names, -Q:會將逃逸字符進行轉義,「‘」 '"'會換位'`',若是是ANSI_QUOTES SQL模式支持的話,會轉爲‘"‘’,此選項默認啓動,若是須要關閉,可使用--skip-quote-names。

    · --replace:使用REPLACE代替INSERT。

    · --result-file=file_name, -r file_name:直接輸出到指定的文件。建立結果文件及其以前的內容覆蓋,即便發生錯誤而生成轉儲。這個選項應該在Windows上使用,以防止換行符「\ n」字符被轉換爲「\ r \ n」回車/換行符序列

    ` --routines, -R:包括存儲程序(過程和函數)的傾倒數據庫輸出。這個選項須要mysql.proc表的SELECT權限。使用,例程生成的輸出包含建立過程和建立函數語句建立例程。然而,這些語句不包括屬性,如例程建立和修改時間戳,因此當例程.從新加載,建立時間戳等於從新加載時間。若是你須要建立例程和原來的時間戳屬性,不使用,例程。相反,轉儲和重載mysql的內容。proc直接表,使用MySQL帳戶有合適的MySQL數據庫特權。

    · --set-charset:在輸出的文件中添加SET NAMES 指定,此選項是默認的,如需關閉可以使用--skip-set-charset。

    · --shared-memory-base-name=name:在Windows上,所使用的共享內存的名字,使用共享內存鏈接到本地服務器。默認值是MYSQL。共享內存名稱是區分大小寫的。服務器必須啓動——共享內存選項來啓用共享內存鏈接。

    · --single-transaction:這個選項設置事務隔離模式可重複讀取和發送一個開始事務服務器的SQL語句,並把數據。是有用的只有InnoDB等事務性表,由於它轉儲的一致狀態數據庫事務開始時發佈不阻止任何應用程序。當使用這個選項,你應該記住,只有InnoDB表在一個一致的狀態。例如,任何MyISAM表或內存傾倒在使用這個選項可能仍然改變狀態。

    ——單獨的事務轉儲是在過程,以確保一個有效的轉儲文件和二進制日誌座標)(正確的表內容,沒有其餘的鏈接應使用如下語句:ALTER table,建立表,刪除表,重命名錶,截斷。目的是爲了保持一致性。這也會添加表鎖。

    此選項支持MySQL集羣,結果不能保證由於NDBCLUSTER一致存儲引擎只支持READ_COMMITTED事務隔離級別。你應該老是使用NDB備份和恢復。

    在備份很大的表時,結合--quick與此選項使用。

    · --skip-comments:參照--comments

    · --skip-opt:參照--opt。

    · --socket=path, -S path:在與本機通訊時,Unix系統會基於Unix sock file進行通訊,Windows基於pipe。

    · --ssl*:使用ssl加密通訊數據

    · --tab=dir_name, -T dir_name:產生製表符分隔的文本格式的數據文件。對於每一個轉儲表,,mysqldump建立一個tbl_name。sql文件,其中包含CREATE TABLE語句建立表,和服務器tbl_name寫道。txt文件,其中包含數據的選項值是編寫的文件的目錄。

    此選項只應該在MySQL服務器備份時使用。

    ·  --tables:--databases後使用,此選項會使mysqldump將以後參數視爲表名。

    · --triggers:會在導出每一個表時都導出觸發器,不過須要具備TIGGER的權限,此選項默認啓用。

    · --tz-utc:默認啓用,禁用可使用--skip-tz-utc。此爲時區信息。

    · --user=user_name, -u user_name:鏈接MySQL服務器使用的用戶名

    · --verbose, -v:verbose模式,此模式會輸出更多有關程序的信息。

    · --version, -V:顯示版本信息並退出程序。

    · --where='where_condition', -w 'where_condition':備份時使用where條件

    · --xml, -X:輸出爲xml格式

相關文章
相關標籤/搜索