MySQL mysqldump命令的正確應(yīng)用
MySQL mysqldump命令在實際中的應(yīng)用比例還是占為多數(shù)的,如果你對這一技術(shù),心存好奇的話,以下的文章將會揭開它的神秘面紗。希望會給你帶來一些幫助在以后的學(xué)習(xí)或是工作中。
1.用MySQL mysqldump對MySQL數(shù)據(jù)庫進(jìn)行數(shù)據(jù)備份與恢復(fù)
下面假設(shè)要備份tm這個數(shù)據(jù)庫:
Shell>mysqldump -uroot –p123456 tm > tm_050519.sql
這時可以利用gzip壓縮數(shù)據(jù),命令如下:
Shell>mysqldump -uroot -p123456 tm | gzip > tm_050519.sql.gz
恢復(fù)數(shù)據(jù):
Shell>mysql -uroot -p123456 tm < tm_050519.sql
從壓縮文件直接恢復(fù):
Shell>gzip < tm_050519.sql.gz | mysql -uroot -p123456 tm
2.關(guān)于使用mysqldump的一些參數(shù)選項
(1)直接使用MySQL mysqldump -uroot -pxxxx tetratest > "d:\data1.sql"
導(dǎo)出數(shù)據(jù)時,沒有建庫語句,這時你可以手動創(chuàng)建一個庫,然后使用:
mysql -uroot -pabcd mydatabase < "d:\data1.sql",即將一個數(shù)據(jù)庫“復(fù)制”到一個不同名稱的數(shù)據(jù)庫下。同時,這種情況下,存儲過程及函數(shù)并沒有轉(zhuǎn)儲到文件中。
(2)如果你未使用--quick或者--opt選項,那么mysqldump將在轉(zhuǎn)儲結(jié)果之前把全部內(nèi)容載入到內(nèi)存中。這在你轉(zhuǎn)儲大數(shù)據(jù)量的數(shù)據(jù)庫時將會有些問題。該選項默認(rèn)是打開的,但可以使用--skip-opt來關(guān)閉它。
(3)使用--skip-comments可以去掉導(dǎo)出文件中的注釋語句
(4)使用--compact選項可以只輸出最重要的語句,而不輸出注釋及刪除表語句等等
(5)使用--database或-B選項,可以轉(zhuǎn)儲多個數(shù)據(jù)庫,在這個選項名后的參數(shù)都被認(rèn)定為數(shù)據(jù)庫名
mysqldump -uroot -paaa --database db1 db2 >"d:\mydata.sql"。同時,使用該參數(shù)會使用導(dǎo)出文件中增加創(chuàng)建庫的語句。如不帶該選項,則第二個參數(shù)將被認(rèn)定為表名,即:MySQL mysqldump -uroot -paaa my1 mytable1 >"d:\mydata.sql",將導(dǎo)出表mytable1的結(jié)構(gòu)及數(shù)據(jù)。
(6)--tables ,在此選項之后的參數(shù)都被認(rèn)定為表名。
(7)--no-create-db
(8)--no-create-info
(9)--no-data
(10)--routines, -R 將使存儲過程、函數(shù)也轉(zhuǎn)儲到文件中來。
(更多請參考MySQL手冊)
3.MySQL中的臨時表及HEAP表
給正常的CREATE TABLE語句加上TEMPORARY關(guān)鍵字:
- CREATE TEMPORARY TABLE tmp_table (
- name VARCHAR(10) NOT NULL,
- value INTEGER NOT NULL
- )
臨時表將在你連接MySQL期間存在。當(dāng)你斷開時,MySQL將自動刪除表并釋放所用的空間。當(dāng)然你可以在仍然連接的時候刪除表并釋放空間。
DROP TABLE tmp_table
如果你聲明臨時表是一個HEAP表,MySQL也允許你指定在內(nèi)存中創(chuàng)建它:
- CREATE TEMPORARY TABLE tmp_table (
- name VARCHAR(10) NOT NULL,
- value INTEGER NOT NULL
- ) TYPE = HEAP
HEAP表格使用一個哈希索引并且存儲在內(nèi)存中,這使他們更快,但是如果MySQL崩潰,你將失去所有存儲的數(shù)據(jù)。HEAP作為臨時表很可用!
當(dāng)你使用HEAP表時,這里是你應(yīng)該考慮的一些事情:
你應(yīng)該總是在CREATE語句中指定MAX_ROWS以保證你有意不使用所有的內(nèi)存。
索引將只能與與=和<=>一起使用(但是很快)。
HEAP表使用一個固定的記錄長度格式。
HEAP不支持BLOB/TEXT列。
HEAP不支持AUTO_INCREMENT列。
HEAP不支持在一個NULL列上的索引。
你可以在一個HEAP表中有非唯一鍵(哈希表一般不這樣)。
HEAP表格在所有的客戶之間被共享(就象任何其他的表)。
HEAP表的數(shù)據(jù)以小塊分配。表是100%動態(tài)的(在插入時),無需溢出區(qū)和額外的鍵空間。刪除的行放入一個鏈接表并且當(dāng)你把新數(shù)據(jù)插入到表時,它將被再次使用。
為了釋放內(nèi)存,你應(yīng)該執(zhí)行DELETE FROM heap_table或DROP TABLE heap_table。
為了保證你不會偶然做些愚蠢的事情,你不能創(chuàng)建比max_heap_table_size大的HEAP表。
上述的相關(guān)內(nèi)容就是對MySQL mysqldump命令的描述,希望會給你帶來一些幫助在此方面。
【編輯推薦】