mysqldump:數據庫備份程序

mysqldump客戶端可用來轉儲數據庫或蒐集數據庫進行備份或將數據轉移到另一個SQL服務器(不一定是一個MySQL服務器)。轉儲包含創建表和/或裝載表的SQL語句。

如果你在服務器上進行備份,並且表均爲MyISAM表,應考慮使用mysqlhotcopy,因爲可以更快地進行備份和恢復。

有3種方式來調用mysqldump:

  1. shellmysqldump [options] db_name [tables]
  2. shellmysqldump [options] ---database DB1 [DB2 DB3...]
  3. shellmysqldump [options] --all--database

如果沒有指定任何表或使用了—database或–all–database選項,則轉儲整個數據庫。

要想獲得你的版本的mysqldump支持的選項,執行mysqldump —help。

如果運行mysqldump沒有–quick或–opt選項,mysqldump在轉儲結果前將整個結果集裝入內存。如果轉儲大數據庫可能會出現問題。該選項默認啓用,但可以用–skip-opt禁用。

如果使用最新版本的mysqldump程序生成一個轉儲重裝到很舊版本的MySQL服務器中,不應使用–opt或-e選項。

mysqldump支持下面的選項:

  1. ---help,-?
  2.     顯示幫助消息並退出。
  3.        
  4. --add-drop--database
  5.     在每個CREATE DATABASE語句前添加DROP DATABASE語句。
  6.  
  7. --add-drop-tables
  8.     在每個CREATE TABLE語句前添加DROP TABLE語句。
  9.        
  10. --add-locking
  11.     用LOCK TABLES和UNLOCK TABLES語句引用每個錶轉儲。重載轉儲文件時插入得更快。
  12.        
  13. --all--database,-A
  14.     轉儲所有數據庫中的所有表。與使用---database選項相同,在命令行中命名所有數據庫。
  15.        
  16. --allow-keywords
  17.     允許創建關鍵字列名。應在每個列名前面加上表名前綴。
  18.        
  19. ---comments[={0|1}]
  20.     如果設置爲 0,禁止轉儲文件中的其它信息,例如程序版本、服務器版本和主機。
  21.        
  22. --skip—comments
  23.     與---comments=0的結果相同。 默認值爲1,即包括額外信息。
  24.        
  25. --compact
  26.     產生少量輸出。該選項禁用註釋並啓用--skip-add-drop-tables、--no-set-names、--skip-disable-keys和--skip-add-locking選項。
  27.        
  28. --compatible=name
  29.     產生與其它數據庫系統或舊的MySQL服務器更兼容的輸出。值可以爲ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options或者no_field_options。要使用幾個值,用逗號將它們隔開。這些值與設置服務器SQL模式的相應選項有相同的含義。該選項不能保證同其它服務器之間的兼容性。它只啓用那些目前能夠使轉儲輸出更兼容的SQL模式值。例如,--compatible=oracle 不映射Oracle類型或使用Oracle註釋語法的數據類型。
  30.        
  31. --complete-insert,-c
  32.     使用包括列名的完整的INSERT語句。
  33.        
  34. --compress,-C
  35.     壓縮在客戶端和服務器之間發送的所有信息(如果二者均支持壓縮)。
  36.        
  37. --create-option
  38.     在CREATE TABLE語句中包括所有MySQL表選項。
  39.        
  40. --database,-B
  41.     轉儲幾個數據庫。通常情況,mysqldump將命令行中的第1個名字參量看作數據庫名,後面的名看作表名。使用該選項,它將所有名字參量看作數據庫名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name語句包含在每個新數據庫前的輸出中。
  42.        
  43. ---debug[=debug_options],-# [debug_options]
  44.     寫調試日誌。debug_options字符串通常爲'd:t:o,file_name'。
  45.  
  46. --default-character-set=charset
  47.     使用charsetas默認字符集。參見5.10.1節,“數據和排序用字符集”。如果沒有指定,mysqldump使用utf8。
  48.        
  49. --delayed-insert
  50.     使用INSERT DELAYED語句插入行。
  51.        
  52. --delete-master-logs
  53.     在主複製服務器上,完成轉儲操作後刪除二進制日誌。該選項自動啓用--master-data。
  54.        
  55. --disable-keys,-K
  56.     對於每個表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;語句引用INSERT語句。這樣可以更快地裝載轉儲文件,因爲在插入所有行後創建索引。該選項只適合MyISAM表。
  57.        
  58. --extended-insert,-e
  59.     使用包括幾個VALUES列表的多行INSERT語法。這樣使轉儲文件更小,重載文件時可以加速插入。
  60.        
  61. --fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...,--行-terminated-by=...
  62.     這些選項結合-T選項使用,與LOAD DATA INFILE的相應子句有相同的含義。
  63.        
  64. --first-slave,-x
  65.     不贊成使用,現在重新命名爲--lock-all-tables。
  66.        
  67. --flush-logs,-F
  68.     開始轉儲前刷新MySQL服務器日誌文件。該選項要求RELOAD權限。請注意如果結合--all--database(或-A)選項使用該選項,根據每個轉儲的數據庫刷新日誌。例外情況是當使用--lock-all-tables或--master-data的時候:在這種情況下,日誌只刷新一次,在所有 表被鎖定後刷新。如果你想要同時轉儲和刷新日誌,應使用--flush-logs連同--lock-all-tables或--master-data。
  69.        
  70. --force,-f
  71.     在錶轉儲過程中,即使出現SQL錯誤也繼續。
  72.        
  73. --host=host_name,-h
  74.     host_name從給定主機的MySQL服務器轉儲數據。默認主機是localhost。
  75.        
  76. --hex-blob
  77.     使用十六進制符號轉儲二進制字符串列(例如,'abc' 變爲0x616263)。影響到的列有BINARY、VARBINARY、BLOB。
  78.        
  79. --lock-all-tables,-x
  80.         所有數據庫中的所有表加鎖。在整體轉儲過程中通過全局讀鎖定來實現。該選項自動關閉--single-transaction和--lock-tables。
  81.        
  82. --lock-tables,-l
  83.     開始轉儲前鎖定所有表。用READ LOCAL鎖定表以允許並行插入MyISAM表。對於事務表例如InnoDB和BDB,--single-transaction是一個更好的選項,因爲它不根本需要鎖定表。請注意當轉儲多個數據庫時,--lock-tables分別爲每個數據庫鎖定表。因此,該選項不能保證轉儲文件中的表在數據庫之間的邏輯一致性。不同數據庫表的轉儲狀態可以完全不同。
  84.        
  85. --master-data[=value]
  86.     該選項將二進制日誌的位置和文件名寫入到輸出中。該選項要求有RELOAD權限,並且必須啓用二進制日誌。如果該選項值等於1,位置和文件名被寫入CHANGE MASTER語句形式的轉儲輸出,如果你使用該SQL轉儲主服務器以設置從服務器,從服務器從主服務器二進制日誌的正確位置開始。如果選項值等於2,CHANGE MASTER語句被寫成SQL註釋。如果value被省略,這是默認動作。
  87.        
  88. --master-data
  89.     選項啓用--lock-all-tables,除非還指定--single-transaction(在這種情況下,只在剛開始轉儲時短時間獲得全局讀鎖定。又見--single-transaction。在任何一種情況下,日誌相關動作發生在轉儲時。該選項自動關閉--lock-tables。
  90.        
  91. --no-create-db,-n
  92.     該選項禁用CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name語句,如果給出---database或--all--database選項,則包含到輸出中。
  93.        
  94. --no-create-info,-t
  95.     不寫重新創建每個轉儲表的CREATE TABLE語句。
  96.        
  97. --no-data,-d
  98.     不寫表的任何行信息。如果你只想轉儲表的結構這很有用。
  99.        
  100. --opt
  101.     該選項是速記;等同於指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以給出很快的轉儲操作併產生一個可以很快裝入MySQL服務器的轉儲文件。該選項默認開啓,但可以用--skip-opt禁用。要想只禁用確信用-opt啓用的選項,使用--skip形式;例如,--skip-add-drop-tables或--skip-quick。
  102.        
  103. --password[=password],-p[password]
  104.     連接服務器時使用的密碼。如果你使用短選項形式(-p),不能在選項和密碼之間有一個空格。如果在命令行中,忽略了--password或-p選項後面的 密碼值,將提示你輸入一個
  105.    
  106. --port=port_num,-P
  107.     port_num用於連接的TCP/IP端口號。
  108.        
  109. --protocol={TCP | SOCKET | PIPE | MEMORY}
  110.     使用的連接協議。
  111.        
  112. --quick,-q
  113.     該選項用於轉儲大的表。它強制mysqldump從服務器一次一行地檢索表中的行而不是檢索所有行並在輸出前將它緩存到內存中。
  114.        
  115. --quote-names,-Q
  116.     用‘`’字符引用數據庫、表和列名。如果服務器SQL模式包括ANSI_QUOTES選項,用‘"’字符引用名。默認啓用該選項。可以用--skip-quote-names禁用,但該選項應跟在其它選項後面,例如可以啓用--quote-names的--compatible。
  117.        
  118. --result-file=file,-r
  119.     file將輸出轉向給定的文件。該選項應用在Windows中,因爲它禁止將新行‘/n’字符轉換爲‘/r/n’回車、返回/新行序列。
  120.        
  121. --routines,-R
  122.     在轉儲的數據庫中轉儲存儲程序(函數和程序)。使用---routines產生的輸出包含CREATE PROCEDURE和CREATE FUNCTION語句以重新創建子程序。但是,這些語句不包括屬性,例如子程序定義者或創建和修改時間戳。這說明當重載子程序時,對它們進行創建時定義者應設置爲重載用戶,時間戳等於重載時間。如果你需要創建的子程序使用原來的定義者和時間戳屬性,不使用--routines。相反,使用一個具有mysql數據庫相應權限的MySQL賬戶直接轉儲和重載mysql.proc表的內容。該選項在MySQL 5.1.2中添加進來。在此之前,存儲程序不轉儲。
  123.        
  124. --set-charset
  125.     將SET NAMES default_character_set加到輸出中。該選項默認啓用。要想禁用SET NAMES語句,使用--skip-set-charset。
  126.        
  127. --single-transaction
  128.     該選項從服務器轉儲數據之前發出一個BEGIN SQL語句。它只適用於事務表,例如InnoDB和BDB,因爲然後它將在發出BEGIN而沒有阻塞任何應用程序時轉儲一致的數據庫狀態。當使用該選項時,應記住只有InnoDB表能以一致的狀態被轉儲。例如,使用該選項時任何轉儲的MyISAM或HEAP表仍然可以更改狀態。
  129.     --single-transaction選項和--lock-tables選項是互斥的,因爲LOCK TABLES會使任何掛起的事務隱含提交。要想轉儲大的表,應結合--quick使用該選項。
  130.        
  131. --socket=path,-S
  132.     path當連接localhost(爲默認主機)時使用的套接字文件。
  133.        
  134. --skip--comments
  135.     參見---comments選項的描述。
  136.        
  137. --tab=path,-T
  138.     path產生tab分割的數據文件。對於每個轉儲的表,mysqldump創建一個包含創建表的CREATE TABLE語句的tbl_name.sql文件,和一個包含其數據的tbl_name.txt文件。選項值爲寫入文件的目錄。默認情況,.txt數據文件的格式是在列值和每行後面的新行之間使用tab字符。可以使用--fields-xxx和--行--xxx選項明顯指定格式。
  139.     註釋:該選項只適用於mysqldump與mysqld服務器在同一臺機器上運行時。你必須具有FILE權限,並且服務器必須有在你指定的目錄中有寫文件的許可。
  140.        
  141. --tables
  142.     覆蓋---database或-B選項。選項後面的所有參量被看作表名。
  143.        
  144. --triggers
  145.     爲每個轉儲的錶轉儲觸發器。該選項默認啓用;用--skip-triggers禁用它。
  146.        
  147. --tz-utc
  148.     在轉儲文件中加入SET TIME_ZONE='+00:00'以便TIMESTAMP列可以在具有不同時區的服務器之間轉儲和重載。(不使用該選項,TIMESTAMP列在具有本地時區的源服務器和目的服務器之間轉儲和重載)。--tz-utc也可以保護由於夏令時帶來的更改。--tz-utc默認啓用。要想禁用它,使用--skip-tz-utc。該選項在MySQL 5.1.2中加入。
  149.        
  150. --user=user_name,-u
  151.     user_name連接服務器時使用的MySQL用戶名。
  152.        
  153. --verbose,-v
  154.     冗長模式。打印出程序操作的詳細信息。
  155.        
  156. --version,-V
  157.     顯示版本信息並退出。
  158.        
  159. --where='where-condition', -w 'where-condition'
  160.     只轉儲給定的WHERE條件選擇的記錄。請注意如果條件包含命令解釋符專用空格或字符,一定要將條件引用起來。
  161.     例如:
  162.         "--where=user='jimf'"
  163.         "-wuserid>1"
  164.         "-wuserid<1"
  165.        
  166. --xml,-X
  167.     將轉儲輸出寫成XML。
  168.        
  169.     還可以使用--var_name=value選項設置下面的變量:
  170.         max_allowed_packet
  171.         客戶端/服務器之間通信的緩存區的最大大小。最大爲1GB。
  172.        
  173.         net_buffer_length
  174.         客戶端/服務器之間通信的緩存區的初始大小。當創建多行插入語句時(如同使用選項--extended-insert或--opt),mysqldump創建長度達net_buffer_length的行。如果增加該變量,還應確保在MySQL服務器中的net_buffer_length變量至少這麼大。
  175.        
  176.     還可以使用--set-variable=var_name=value或-O var_name=value語法設置變量。然而,現在不贊成使用該語法。

mysqldump最常用於備份一個整個的數據庫:

  1. shellmysqldump --opt db_name > backup-file.sql

你可以這樣將轉儲文件讀回到服務器:

  1. shellmysql db_name < backup-file.sql

或者爲:

  1. shellmysql -e "source /path-to--backup/backup-file.sql" db_name

mysqldump也可用於從一個MySQL服務器向另一個服務器複製數據時裝載數據庫:

  1. shellmysqldump --opt db_name | mysql --host=remote_host -C db_name

可以用一個命令轉儲幾個數據庫:

  1. shellmysqldump ---database db_name1 [db_name2 ...] > my_databases.sql

如果你想要轉儲所有數據庫,使用–all–database選項:

  1. shellmysqldump --all-databases > all_databases.sql

如果表保存在InnoDB存儲引擎中,mysqldump提供了一種聯機備份的途徑(參見下面的命令)。該備份只需要在開始轉儲時對所有表進行全局讀鎖定(使用FLUSH
TABLES WITH READ LOCK)。獲得鎖定後,讀取二進制日誌的相應內容並將鎖釋放。因此如果並且只有當發出FLUSH…時正執行一個長的更新語句,MySQL服務器才停止直到長語句結束,然後轉儲則釋放鎖。因此如果MySQL服務器只接收到短(”短執行時間”)的更新語句,即使有大量的語句,也不會注意到鎖期間。

  1. shellmysqldump --all-databases --single-transaction > all_databases.sql

對於點對點恢復(也稱爲“前滾”,當你需要恢復舊的備份並重放該備份以後的更改時),循環二進制日誌或至少知道轉儲對應的二進制日誌內容很有用:

  1. shellmysqldump --all-databases --master-data=2 > all_databases.sql

  1. shellmysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql

如果表保存在InnoDB存儲引擎中,同時使用–master-data和–single-transaction提供了一個很方便的方式來進行適合點對點恢復的聯機備份。

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