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