mysqldump及相關mysql知識

mysqldump及相關mysql知識
 

1.用mysqldumpMySQL數據庫進行數據備份與恢復

下面假設要備份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)直接使用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"。同時,使用該參數會使用導出文件中增加創建庫的語句。如不帶該選項,則第二個參數將被認定爲表名,即: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手冊)

mysqldump支持下列選項:
  
  --add-locks
  
  在每個表導出之前增加LOCK TABLES並且之後UNLOCK TABLE。(爲了使得更快地插入到MySQL)。
  
  --add-drop-table
  
  在每個create語句之前增加一個drop table。
  
  --allow-keywords
  
  允許創建是關鍵詞的列名字。這由在列名前面加表名的方法做到。
  
  -c, --complete-insert
  
  使用完整的insert語句(用列名字)。
  
  -C, --compress
  
  如果客戶和服務器均支持壓縮,壓縮兩者間所有的信息。
  
  --delayed
  
  用INSERT DELAYED命令插入行。
  
  -e, --extended-insert
  
  使用全新多行INSERT語法。(給出更緊縮並且更快的插入語句)
  
  -#, --debug[=option_string]
  
  跟蹤程序的使用(爲了調試)。
  
  --help
  
  顯示一條幫助消息並且退出。
  
  --fields-terminated-by=...
  
  --fields-enclosed-by=...
  
  --fields-optionally-enclosed-by=...
  
  --fields-escaped-by=...
  
  --fields-terminated-by=...
  
  這些選擇與-T選擇一起使用,並且有相應的LOAD DATA INFILE子句相同的含義。
  
  LOAD DATA INFILE語法。
  
  -F, --flush-logs
  
  在開始導出前,洗掉在MySQL服務器中的日誌文件。
  
  -f, --force,
  
  即使我們在一個表導出期間得到一個SQL錯誤,繼續。
  
  -h, --host=..
  
  從命名的主機上的MySQL服務器導出數據。缺省主機是localhost。
  
  -l, --lock-tables.
  
  爲開始導出鎖定所有表。
  
  -t, --no-create-info
  
  不寫入表創建信息(CREATE TABLE語句)
  
  -d, --no-data
  
  不寫入表的任何行信息。如果你只想得到一個表的結構的導出,這是很有用的!
  
  --opt
  
  同--quick --add-drop-table --add-locks --extended-insert --lock-tables。
  
  應該給你爲讀入一個MySQL服務器的儘可能最快的導出。
  
  -pyour_pass, --password[=your_pass]
  
  與服務器連接時使用的口令。如果你不指定“=your_pass”部分,mysqldump需要來自終端的口令。
  
  -P port_num, --port=port_num
  
  與一臺主機連接時使用的TCP/IP端口號。(這用於連接到localhost以外的主機,因爲它使用 Unix套接字。)
  
  -q, --quick
  
  不緩衝查詢,直接導出至stdout;使用mysql_use_result()做它。
  
  -S /path/to/socket, --socket=/path/to/socket
  
  與localhost連接時(它是缺省主機)使用的套接字文件。
  
  -T, --tab=path-to-some-directory
  
  對於每個給定的表,創建一個table_name.sql文件,它包含SQL CREATE 命令,和一個table_name.txt文件,它包含數據。注意:這只有在mysqldump運行在mysqld守護進程運行的同一臺機器上的時候才工作。.txt文件的格式根據--fields-xxx和--lines--xxx選項來定。
  
  -u user_name, --user=user_name
  
  與服務器連接時,MySQL使用的用戶名。缺省值是你的Unix登錄名。
  
  -O var=option, --set-variable var=option
  
  設置一個變量的值。可能的變量被列在下面。
  
  -v, --verbose
  
  冗長模式。打印出程序所做的更多的信息。
  
  -V, --version
  
  打印版本信息並且退出。
  
  -w, --where=&apos;where-condition&apos;
  
  只導出被選擇了的記錄;注意引號是強制的!
  
  "--where=user=&apos;jimf&apos;" "-wuserid>1" "-wuserid<1"
  
  最常見的mysqldump使用可能製作整個數據庫的一個備份:
  
  mysqldump --opt database > backup-file.sql
  
  但是它對用來自於一個數據庫的信息充實另外一個MySQL數據庫也是有用的:
  
  mysqldump --opt database   mysql --host=remote-host -C database
  
  由於mysqldump導出的是完整的SQL語句,所以用mysql客戶程序很容易就能把數據導入了:
  
  mysqladmin create target_db_name



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_tableDROP TABLE heap_table

爲了保證你不會偶然做些愚蠢的事情,你不能創建比max_heap_table_size大的HEAP表。


4.MySQL的數據庫引擎的類型

你能用的數據庫引擎取決於mysql在安裝的時候是如何被編譯的。要添加一個新的引擎,就必須重新編譯MYSQL。在缺省情況下,MYSQL支持三個引擎:ISAMMYISAMHEAP。另外兩種類型INNODBBERKLEYBDB),也常常可以使用。

ISAM

ISAM是一個定義明確且歷經時間考驗的數據表格管理方法,它在設計之時就考慮到數據庫被查詢的次數要遠大於更新的次數。因此,ISAM執行讀取操作的速度很快,而且不佔用大量的內存和存儲資源。ISAM的兩個主要不足之處在於,它不支持事務處理,也不能夠容錯:如果你的硬盤崩潰了,那麼數據文件就無法恢復了。如果你正在把ISAM用在關鍵任務應用程序裏,那就必須經常備份你所有的實時數據,通過其複製特性,MYSQL能夠支持這樣的備份應用程序。

MYISAM

MYISAMMYSQLISAM擴展格式和缺省的數據庫引擎。除了提供ISAM裏所沒有的索引和字段管理的大量功能,MYISAM還使用一種表格鎖定的機制,來優化多個併發的讀寫操作。其代價是你需要經常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間。MYISAM還有一些有用的擴展,例如用來修復數據庫文件的MYISAMCHK工具和用來恢復浪費空間的MYISAMPACK工具。

MYISAM強調了快速讀取操作,這可能就是爲什麼MYSQL受到了WEB開發如此青睞的主要原因:在WEB開發中你所進行的大量數據操作都是讀取操作。所以,大多數虛擬主機提供商和INTERNET平臺提供商只允許使用MYISAM格式。

HEAP

HEAP允許只駐留在內存裏的臨時表格。駐留在內存裏讓HEAP要比ISAMMYISAM都快,但是它所管理的數據是不穩定的,而且如果在關機之前沒有進行保存,那麼所有的數據都會丟失。在數據行被刪除的時候,HEAP也不會浪費大量的空間。HEAP表格在你需要使用SELECT表達式來選擇和操控數據的時候非常有用。要記住,在用完表格之後就刪除表格。

INNODBBERKLEYDB

INNODBBERKLEYDBBDB)數據庫引擎都是造就MYSQL靈活性的技術的直接產品,這項技術就是MYSQL++ API。在使用MYSQL的時候,你所面對的每一個挑戰幾乎都源於ISAMMYISAM數據庫引擎不支持事務處理也不支持外來鍵。儘管要比ISAMMYISAM引擎慢很多,但是INNODBBDB包括了對事務處理和外來鍵的支持,這兩點都是前兩個引擎所沒有的。如前所述,如果你的設計需要這些特性中的一者或者兩者,那你就要被迫使用後兩個引擎中的一個了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章