mysqldump客戶端可用來轉儲數據庫或搜集數據庫進行備份或將數據轉移到另一個SQL服務器(不一定是一個MySQL服務器)轉儲包含創建表和/或裝載表的SQL語句
如果你在服務器上進行備份並且表均為MyISAM表應考慮使用mysqlhotcopy因為可以更快地進行備份和恢復參見節mysqlhotcopy:數據庫備份程序
有種方式來調用mysqldump:
C代碼
shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] database DB [DB DB…]
shell> mysqldump [options] alldatabase
如果沒有指定任何表或使用了database或alldatabase選項則轉儲整個數據庫
要想獲得你的版本的mysqldump支持的選項執行mysqldump help
如果運行mysqldump沒有quick或opt選項mysqldump在轉儲結果前將整個結果集裝入內存如果轉儲大數據庫可能會出現問題該選項默認啟用但可以用skipopt禁用
如果使用最新版本的mysqldump程序生成一個轉儲重裝到很舊版本的MySQL服務器中不應使用opt或e選項
mysqldump支持下面的選項
help?
顯示幫助消息並退出
adddropdatabase
在每個CREATE DATABASE語句前添加DROP DATABASE語句
adddroptables
在每個CREATE TABLE語句前添加DROP TABLE語句
addlocking
用LOCK TABLES和UNLOCK TABLES語句引用每個表轉儲重載轉儲文件時插入得更快參見節INSERT語句的速度
alldatabaseA
轉儲所有數據庫中的所有表與使用database選項相同在命令行中命名所有數據庫
allowkeywords
允許創建關鍵字列名應在每個列名前面加上表名前綴
comments[={|}]
如果設置為 禁止轉儲文件中的其它信息例如程序版本服務器版本和主機skipcomments與comments=的結果相同 默認值為即包括額外信息
compact
產生少量輸出該選項禁用注釋並啟用skipadddroptablesnosetnamesskipdisablekeys和skipaddlocking選項
compatible=name
產生與其它數據庫系統或舊的MySQL服務器更兼容的輸出值可以為ansimysqlmysqlpostgresqloraclemssqldbmaxdbno_key_optionsno_tables_options或者no_field_options要使用幾個值用逗號將它們隔開這些值與設置服務器SQL模式的相應選項有相同的含義參見節SQL服務器模式
該選項不能保證同其它服務器之間的兼容性它只啟用那些目前能夠使轉儲輸出更兼容的SQL模式值例如compatible=oracle 不映射Oracle類型或使用Oracle注釋語法的數據類型
completeinsertc
使用包括列名的完整的INSERT語句
compressC
壓縮在客戶端和服務器之間發送的所有信息(如果二者均支持壓縮)
createoption
在CREATE TABLE語句中包括所有MySQL表選項
databaseB
轉儲幾個數據庫通常情況mysqldump將命令行中的第個名字參量看作數據庫名後面的名看作表名使用該選項它將所有名字參量看作數據庫名CREATE DATABASE IF NOT EXISTS db_name和USE db_name語句包含在每個新數據庫前的輸出中
debug[=debug_options]# [debug_options]
寫調試日志debug_options字符串通常為d:t:ofile_name
defaultcharacterset=charset
使用charsetas默認字符集參見節數據和排序用字符集如果沒有指定mysqldump使用utf
delayedinsert
使用INSERT DELAYED語句插入行
deletemasterlogs
在主復制服務器上完成轉儲操作後刪除二進制日志該選項自動啟用masterdata
disablekeysK
對於每個表用/*! ALTER TABLE tbl_name DISABLE KEYS */;和/*! ALTER TABLE tbl_name ENABLE KEYS */;語句引用INSERT語句這樣可以更快地裝載轉儲文件因為在插入所有行後創建索引該選項只適合MyISAM表
extendedinserte
使用包括幾個VALUES列表的多行INSERT語法這樣使轉儲文件更小重載文件時可以加速插入
fieldsterminatedby=…fieldsenclosedby=…fieldsoptionallyenclosedby=…fieldsescapedby=…行terminatedby=…
這些選項結合T選項使用與LOAD DATA INFILE的相應子句有相同的含義參見節LOAD DATA INFILE語法
firstslavex
不贊成使用現在重新命名為lockalltables
flushlogsF
開始轉儲前刷新MySQL服務器日志文件該選項要求RELOAD權限請注意如果結合alldatabase(或A)選項使用該選項根據每個轉儲的數據庫刷新日志例外情況是當使用lockalltables或masterdata的時候在這種情況下日志只刷新一次在所有 表被鎖定後刷新如果你想要同時轉儲和刷新日志應使用flushlogs連同lockalltables或masterdata
forcef
在表轉儲過程中即使出現SQL錯誤也繼續
host=host_nameh host_name
從給定主機的MySQL服務器轉儲數據默認主機是localhost
hexblob
使用十六進制符號轉儲二進制字符串列(例如abc 變為x)影響到的列有BINARYVARBINARYBLOB
lockalltablesx
所有數據庫中的所有表加鎖在整體轉儲過程中通過全局讀鎖定來實現該選項自動關閉singletransaction和locktables
locktablesl
開始轉儲前鎖定所有表用READ LOCAL鎖定表以允許並行插入MyISAM表對於事務表例如InnoDB和BDBsingletransaction是一個更好的選項因為它不根本需要鎖定表
請注意當轉儲多個數據庫時locktables分別為每個數據庫鎖定表因此該選項不能保證轉儲文件中的表在數據庫之間的邏輯一致性不同數據庫表的轉儲狀態可以完全不同
masterdata[=value]
該選項將二進制日志的位置和文件名寫入到輸出中該選項要求有RELOAD權限並且必須啟用二進制日志如果該選項值等於位置和文件名被寫入CHANGE MASTER語句形式的轉儲輸出如果你使用該SQL轉儲主服務器以設置從服務器從服務器從主服務器二進制日志的正確位置開始如果選項值等於CHANGE MASTER語句被寫成SQL注釋如果value被省略這是默認動作
masterdata
選項啟用lockalltables除非還指定singletransaction(在這種情況下只在剛開始轉儲時短時間獲得全局讀鎖定又見singletransaction在任何一種情況下日志相關動作發生在轉儲時該選項自動關閉locktables
nocreatedbn
該選項禁用CREATE DATABASE /*! IF NOT EXISTS*/ db_name語句如果給出database或alldatabase選項則包含到輸出中
nocreateinfot
不寫重新創建每個轉儲表的CREATE TABLE語句
nodatad
不寫表的任何行信息如果你只想轉儲表的結構這很有用
opt
該選項是速記等同於指定 adddroptablesaddlocking createoption disablekeysextendedinsert locktables quick setcharset它可以給出很快的轉儲操作並產生一個可以很快裝入MySQL服務器的轉儲文件該選項默認開啟但可以用skipopt禁用要想只禁用確信用opt啟用的選項使用skip形式例如skipadddroptables或skipquick
password[=password]p[password]
連接服務器時使用的密碼如果你使用短選項形式(p)不能在選項和密碼之間有一個空格如果在命令行中忽略了password或p選項後面的 密碼值將提示你輸入一個
port=port_numP port_num
用於連接的TCP/IP端口號
protocol={TCP | SOCKET | PIPE | MEMORY}
使用的連接協議
quickq
該選項用於轉儲大的表它強制mysqldump從服務器一次一行地檢索表中的行而不是檢索所有行並在輸出前將它緩存到內存中
quotenamesQ
用`字符引用數據庫表和列名如果服務器SQL模式包括ANSI_QUOTES選項用字符引用名默認啟用該選項可以用skipquotenames禁用但該選項應跟在其它選項後面例如可以啟用quotenames的compatible
resultfile=filer file
將輸出轉向給定的文件該選項應用在Windows中因為它禁止將新行\n字符轉換為\r\n回車返回/新行序列
routinesR
在轉儲的數據庫中轉儲存儲程序(函數和程序)使用routines產生的輸出包含CREATE PROCEDURE和CREATE FUNCTION語句以重新創建子程序但是這些語句不包括屬性例如子程序定義者或創建和修改時間戳這說明當重載子程序時對它們進行創建時定義者應設置為重載用戶時間戳等於重載時間
如果你需要創建的子程序使用原來的定義者和時間戳屬性不使用routines相反使用一個具有mysql數據庫相應權限的MySQL賬戶直接轉儲和重載mysqlproc表的內容
該選項在MySQL 中添加進來在此之前存儲程序不轉儲
setcharset
將SET NAMES default_character_set加到輸出中該選項默認啟用要想禁用SET NAMES語句使用skipsetcharset
singletransaction
該選項從服務器轉儲數據之前發出一個BEGIN SQL語句它只適用於事務表例如InnoDB和BDB因為然後它將在發出BEGIN而沒有阻塞任何應用程序時轉儲一致的數據庫狀態
當使用該選項時應記住只有InnoDB表能以一致的狀態被轉儲例如使用該選項時任何轉儲的MyISAM或HEAP表仍然可以更改狀態
singletransaction選項和locktables選項是互斥的因為LOCK TABLES會使任何掛起的事務隱含提交
要想轉儲大的表應結合quick使用該選項
socket=pathS path
當連接localhost(為默認主機)時使用的套接字文件
skipcomments
參見comments選項的描述
tab=pathT path
產生tab分割的數據文件對於每個轉儲的表mysqldump創建一個包含創建表的CREATE TABLE語句的tbl_namesql文件和一個包含其數據的tbl_nametxt文件選項值為寫入文件的目錄
默認情況txt數據文件的格式是在列值和每行後面的新行之間使用tab字符可以使用fieldsxxx和行xxx選項明顯指定格式
注釋該選項只適用於mysqldump與mysqld服務器在同一台機器上運行時你必須具有FILE權限並且服務器必須有在你指定的目錄中有寫文件的許可
tables
覆蓋database或B選項選項後面的所有參量被看作表名
triggers
為每個轉儲的表轉儲觸發器該選項默認啟用用skiptriggers禁用它
tzutc
在轉儲文件中加入SET TIME_ZONE=+:以便TIMESTAMP列可以在具有不同時區的服務器之間轉儲和重載(不使用該選項TIMESTAMP列在具有本地時區的源服務器和目的服務器之間轉儲和重載)tzutc也可以保護由於夏令時帶來的更改tzutc默認啟用要想禁用它使用skiptzutc該選項在MySQL 中加入
user=user_nameu user_name
連接服務器時使用的MySQL用戶名
verbosev
冗長模式打印出程序操作的詳細信息
versionV
顯示版本信息並退出
where=wherecondition w wherecondition
只轉儲給定的WHERE條件選擇的記錄請注意如果條件包含命令解釋符專用空格或字符一定要將條件引用起來
例如
where=user=jimf
wuserid>
wuserid<
xmlX
將轉儲輸出寫成XML
還可以使用var_name=value選項設置下面的變量
max_allowed_packet
客戶端/服務器之間通信的緩存區的最大大小最大為GB
net_buffer_length
客戶端/服務器之間通信的緩存區的初始大小當創建多行插入語句時(如同使用選項extendedinsert或opt)mysqldump創建長度達net_buffer_length的行如果增加該變量還應確保在MySQL服務器中的net_buffer_length變量至少這麼大
還可以使用setvariable=var_name=value或O var_name=value語法設置變量然而現在不贊成使用該語法
例
a導出整個數據庫 mysqldump u 用戶名 p 數據庫名 > 導出的文件名
C代碼
[root@linux mysql]# mysqldump u dbadmin p myblog > /home/zhangy/blog/database_bak/myblogsql
b導出一個表 mysqldump u 用戶名 p 數據庫名 表名> 導出的文件名
C代碼
[root@linux mysql]# mysqldump u dbadmin p myblog wp_users> /home/zhangy/blog/database_bak/blog_userssql
c導出一個數據庫結構 d 沒有數據 adddroptable 在每個create語句之前增加一個drop table
C代碼
[root@linux mysql]# mysqldump u dbadmin p d adddroptable myblog > /home/zhangy/blog/database_bak/blog_strucsql
d導出數據庫一個表結構
C代碼
[root@linux mysql]# mysqldump u dbadmin p d adddroptable myblog wp_users> /home/zhangy/blog/database_bak/blog_users_strucsql
例
mysqldump導出數據庫並壓縮
C代碼
$ mysqldump u user ppassword database | xz > databasesqlxz #使用xz壓縮如果換成gzip可以改成gz壓縮bzip同樣注意最後的擴展名
$ unxz c databasesqlxz | mysql u user ppassword database #不需要釋放出已壓縮的sql腳本直接進行導入操作如果是其他格式的壓縮需要相應的解壓命令使用解壓到stdout的參數
$ pv databasesqlxz | unxz c | mysql u user ppassword database #想看到導入的進度?沒問題使用pv命令就可以需要自己安裝pv命令ubuntu系統直接aptget install pvRHEL/centos需要添加rpmfusion源之後yum install pv
From:http://tw.wingwit.com/Article/program/MySQL/201311/29354.html