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