mysql數(shù)據(jù)庫備份一般使用命令mysqldump,這個命令會在屏幕打印指定數(shù)據(jù)庫、數(shù)據(jù)表的創(chuàng)建的SQL語句和數(shù)據(jù)表中數(shù)據(jù)的插入SQL語句。該命令導(dǎo)出的SQL語句在不同數(shù)據(jù)庫之間是可移植的。
mysqldump還可以同時導(dǎo)出包含sql語句的文件和以特定符號分割的數(shù)據(jù)文件
下面介紹mysqldump的用法:
mysqldump的用法有三種:
mysqldump [options] database_name [table1 table2 ...]
備份特定數(shù)據(jù)庫,可以指定特定表,以空格分隔
mysqldump [options] --database database1 database2
備份特定數(shù)據(jù)庫
mysqldump [options] --all-database / mysqldump [options] -A
備份所有數(shù)據(jù)庫
mysqldump還有很多選項,下面根據(jù)選項的使用頻率依次介紹
--user=user_name / -u user_name
連接數(shù)據(jù)庫的用戶,-u后面的空格可有可無
--password[=password] / -p[password]
注意-p后面跟密碼時,中間不能間隔空格號,表示連接數(shù)據(jù)庫用戶對應(yīng)的密碼
--host=host_name / -h host_name
注意-h后面一定要有空格,數(shù)據(jù)庫所在服務(wù)器的ip地址或者域名
--port=port_num / -P port_num
服務(wù)器上數(shù)據(jù)庫通訊使用的端口號,-P后的空格可有可無
--result-file=file / -r file
指定輸出的信息到文件,而終端不輸出文字
使用該選項要好于終端的輸出重定向,因為重定向可能會發(fā)生字符編碼的問題
=====================================================================================
--tab=path / -T path
產(chǎn)生tab分割的數(shù)據(jù)文件。對于每個轉(zhuǎn)儲的表,mysqldump創(chuàng)建一個包含創(chuàng)建表的CREATE TABLE語句的tbl_name.sql文件,和一個包含其數(shù)據(jù)的tbl_name.txt文件。選項值定義寫入文件的目錄。默認(rèn)情況,.txt數(shù)據(jù)文件的格式是在列值和每行后面的新行之間使用tab字符。可以使用--fields-xxx和--行--xxx選項明顯指定格式。
需要注意的是:該選項其實是間接調(diào)用了兩個命令,第一個命令類似SHOW CREATE TABLE,第二個產(chǎn)生數(shù)據(jù)文件的命令等同于SELECT … INTO OUTFILE '文件路徑',所以和SELECT … INTO OUTFILE的特點相同,產(chǎn)生的數(shù)據(jù)文件只能存到服務(wù)器中,而不能存到客戶機,所以對指定的目錄路徑path是針對服務(wù)器操作系統(tǒng)的,并且對目錄路徑path要有讀寫的用戶權(quán)限。如果想把類似的數(shù)據(jù)格式化導(dǎo)出文件存到客戶機,可以參考$ >mysql -e "SELECT … FROM … WHERE … " > file_path
--fields-terminated-by=
該選項連同-T選項一起使用,規(guī)定了數(shù)據(jù)域以什么結(jié)束,參數(shù)為字符串,默認(rèn)為\t
--fields-enclosed-by=
該選項連同-T選項一起使用,規(guī)定了數(shù)據(jù)域用什么符號擴起來,默認(rèn)為空,一般可以是雙引號、括號等
--fields-optionally-enclosed-by=
該選項連同-T選項一起使用,規(guī)定了數(shù)據(jù)域可以用什么符號括起來,因為為只有部分?jǐn)?shù)據(jù)用這些符號括起來
--fields-escaped-by=
該選項連同-T選項一起使用,規(guī)定了轉(zhuǎn)義字符,參數(shù)為字符,默認(rèn)為\
--lines-terminated-by=
該選項連同-T選項一起使用,規(guī)定了數(shù)據(jù)行以什么結(jié)束,參數(shù)為字符串,windows默認(rèn)為\r\n
=====================================================================================
--add-drop-database
在每個CREATE DATABASE語句前添加DROP DATABASE語句
--compatible=name
產(chǎn)生與其它數(shù)據(jù)庫系統(tǒng)或舊的MySQL服務(wù)器更兼容的輸出。值可以為ansi(標(biāo)準(zhǔn)SQL)、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_table_options或者no_field_options。同時使用幾個選項,要用逗號將它們隔開
No_key_options不輸出mysql專用索引選項
No_table_options不輸出mysql專用表選項,如ENGINE=MyISAM
No_field_options不輸出mysql專用列選項
--compact
產(chǎn)生少量輸出,該選項相當(dāng)于--comments=0、--skip-add-drop-table、--no-set-name、--skip-disable-key和--skip-add-locking一起使用
--comments[={0|1}]
如果設(shè)置為 0,禁止轉(zhuǎn)儲文件中的其它信息,例如程序版本、服務(wù)器版本和主機。--skip-comments與--comments=0的結(jié)果相同, 默認(rèn)值為1,即包括額外信息
--compress / -C
如果客戶端和服務(wù)器都支持壓縮,則壓縮雙方傳送的所有信息
--default-character-set=charset
使用charsetas默認(rèn)字符集,如果沒有指定,mysqldump使用utf8
--delayed-insert
使用INSERT DELAYED語句插入行
--default-character-set=charset
使用charset作為默認(rèn)字符集
--allow-keywords
允許創(chuàng)建關(guān)鍵字列名,應(yīng)在每個列名前面加上表名前綴
====================================================================================
--opt
該選項應(yīng)該同時代表優(yōu)化(optimize)和選項(option)意思,默認(rèn)開啟,相當(dāng)于同時開啟以下多個選項,省得用戶每次都鍵入選項:--add-drop-table --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset。它可以給出很快的轉(zhuǎn)儲操作并產(chǎn)生一個可以很快裝入MySQL服務(wù)器的轉(zhuǎn)儲文件。可以用--skip-opt禁用。要想只禁用確信用-opt啟用的選項,使用--skip形式;例如,--skip-add-drop-tables或--skip-quick
該選項比較重要,但是由于默認(rèn)開啟,所以不常用
--add-drop-table
在每個CREATE TABLE語句前添加DROP TABLE語句
--add-locking
用LOCK TABLES和UNLOCK TABLES語句引用每個表轉(zhuǎn)儲,重載轉(zhuǎn)儲文件時插入得更快
--create-option
在CREATE TABLE語句中包括所有MySQL表選項
--disable-keys / -K
對于每個表,用ALTER TABLE tbl_name DISABLE KEYS;和ALTER TABLE tbl_name ENABLE KEYS;語句引用INSERT語句。因為在插入所有行后創(chuàng)建索引,所以這樣可以更快地裝載轉(zhuǎn)儲文件,該選項只適合MyISAM表。
--extended-insert / -e
默認(rèn)開啟,使用包括幾個VALUES的多行INSERT語法。這樣使轉(zhuǎn)儲文件更小,重載文件時可以加速插入
--lock-tables,-l
開始轉(zhuǎn)儲前鎖定所有表。用READ LOCAL鎖定表以允許并行插入MyISAM表。對于事務(wù)表例如InnoDB和BDB,--single-transaction是一個更好的選項,因為它不根本需要鎖定表。
--quick,-q
該選項用于轉(zhuǎn)儲大的表。它強制mysqldump從服務(wù)器一次一行地檢索表中的行而不是檢索所有行并在輸出前將它緩存到內(nèi)存中
--set-charset
將SET NAMES default_character_set加到輸出中。該選項默認(rèn)啟用。要想禁用SET NAMES語句,使用--skip-set-charset
=====================================================================================
--complete-insert / -c
使用包括列名的完整的INSERT語句
--single-transaction
該選項從服務(wù)器轉(zhuǎn)儲數(shù)據(jù)之前發(fā)出一個BEGIN SQL語句。它只適用于事務(wù)表,例如InnoDB和BDB,因為然后它將在發(fā)出BEGIN而沒有阻塞任何應(yīng)用程序時轉(zhuǎn)儲一致的數(shù)據(jù)庫狀態(tài)。
當(dāng)使用該選項時,應(yīng)記住只有InnoDB表能以一致的狀態(tài)被轉(zhuǎn)儲。例如,使用該選項時任何轉(zhuǎn)儲的MyISAM或HEAP表仍然可以更改狀態(tài)。
--single-transaction選項和--lock-tables選項是互斥的,因為LOCK TABLES會使任何掛起的事務(wù)隱含提交。要想轉(zhuǎn)儲大的表,應(yīng)結(jié)合--quick使用該選項
--lock-all-tables,-x
所有數(shù)據(jù)庫中的所有表加鎖。在整體轉(zhuǎn)儲過程中通過全局讀鎖定來實現(xiàn)。該選項自動關(guān)閉--single-transaction和--lock-tables
--hex-blob
使用十六進(jìn)制符號轉(zhuǎn)儲二進(jìn)制字符串列(例如,'abc' 變?yōu)?/span>0x616263)。影響到的列有BINARY、VARBINARY、BLOB