必威电竞|足球世界杯竞猜平台

mysqldump
來源:互聯網

MySQLdump是mysql用于轉存儲數據庫的實用程序。它主要產生一個SQL腳本,其中包含從頭重新創(chuàng)建數據庫所必需的命令CREATE TABLE INSERT等。

簡介

mysqldump工具很多方面類似相反作用的工具mysqlimport。它們有一些同樣的選項。但mysqldump能夠做更多的事情。它可以把整個數據庫裝載到一個單獨的文本文件中。這個文件包含有所有重建您的數據庫所需要的SQL命令。這個命令取得所有的模式(Schema,后面有解釋)并且將其轉換成DDL語法(CREATE語句,即數據庫定義語句),取得所有的數據,并且從這些數據中創(chuàng)建INSERT語句。這個工具將您的數據庫中所有的設計倒轉。因為所有的東西都被包含到了一個文本文件中。這個文本文件可以用一個簡單的批處理和一個合適SQL導回到MySQL中。這個工具令人難以置信地簡單而快速。決不會有半點讓人頭疼地地方。

因此,如果您想裝載整個數據庫Meet_A_Geek的內容到一個文件中,可以使用下面的命令:

bin/mysqldump –p Meet_A_Geek > MeetAGeek_Dump_File.txt

這個語句也允許您指定一個表進行dump(備份/導出/裝載?)。如果您只是希望把數據庫Meet_A_Geek中的表Orders中的整個內容導出到一個文件,可以使用下面的命令:

bin/mysqldump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt

這個非常的靈活,您甚至可以使用WHERE從句來選擇您需要的記錄導出到文件中。要達到這樣的目的,可以使用類似于下面的命令:

bin/mysqldump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt

mysqldump工具有大量的選項,部分選項如下表:

選項/Option 作用/Action Performed

--add-drop-table

這個選項將會在每一個表的前面加上DROP TABLE IF EXISTS語句,這樣可以保證導回MySQL數據庫的時候不會出錯,因為每次導回的時候,都會首先檢查表是否存在,存在就刪除

--add-locks

這個選項會在INSERT語句中捆上一個LOCK TABLE和UNLOCK TABLE語句。這就防止在這些記錄被再次導入數據庫時其他用戶對表進行的操作

-c or - complete_insert

這個選項使得mysqldump命令給每一個產生INSERT語句加上列(field)的名字。當把數據導出導另外一個數據庫時這個選項很有用。

--delayed-insert 在INSERT命令中加入DELAY選項

-F or -flush-logs 使用這個選項,在執(zhí)行導出之前將會刷新MySQL服務器的log.

-f or -force 使用這個選項,即使有錯誤發(fā)生,仍然繼續(xù)導出

--full 這個選項把附加信息也加到CREATE TABLE的語句中

-l or -lock-tables 使用這個選項,導出表的時候服務器將會給表加鎖。

-t or -no-create- info

這個選項使的mysqldump命令不創(chuàng)建CREATE TABLE語句,這個選項在您只需要數據而不需要DDL(數據庫定義語句)時很方便。

-d or -no-data 這個選項使的mysqldump命令不創(chuàng)建INSERT語句。

在您只需要DDL語句時,可以使用這個選項。

--opt 此選項將打開所有會提高文件導出速度和創(chuàng)造一個可以更快導入的文件的選項。

-q or -quick 這個選項使得MySQL不會把整個導出的內容讀入內存再執(zhí)行導出,而是在讀到的時候就寫入導文件中。

-T path or -tab = path 這個選項將會創(chuàng)建兩個文件,一個文件包含DDL語句或者表創(chuàng)建語句,另一個文件包含數據。DDL文件被命名為table_name.SQL,數據文件被命名為table_name.txt.路徑名是存放這兩個文件的目錄。目錄必須已經存在,并且命令的使用者有對文件的特權。

-w "WHERE Clause" or -where = "Where clause "

如前面所講的,您可以使用這一選項來過篩選將要放到 導出文件的數據。

假定您需要為一個表單中要用到的帳號建立一個文件,經理要看今年(2004年)所有的訂單(Orders),它們并不對DDL感興趣,并且需要文件有逗號分隔,因為這樣就很容易導入到Excel中。為了完成這個任務,您可以使用下面的句子:

bin/mysqldump –p –where "Order_Date >='2000-01-01'"

–tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders

這將會得到您想要的結果。

Schema:模式

The set of statements, expressed in data definition language, that completely describe the structure of a data base.

一組以數據定義語言來表達的語句集,該語句集完整地描述了數據庫的結構。

SELECT INTO OUTFILE :

使用幫助

數據備份恢復

下面假設要備份tm這個數據庫:

殼層>mysqldump -uroot –p123456 tm > tm_050519.sql

這時可以利用gzip壓縮數據,命令如下:

Shell>mysqldump -uroot -p123456 tm | gzip > tm_050519.SQLgz

恢復數據:

Shell>mysql -uroot -p123456 tm < tm_050519.sql

從壓縮文件直接恢復:

Shell>gzip -d < tm_050519.sql.gz | mysql -uroot -p123456 tm

如何使用mysqldump

(1)直接使用mysqldump -uroot -pxxxx tetratest > "d:\data1.sql"

導出數據時,沒有建庫語句,這時你可以手動創(chuàng)建一個庫,然后使用:

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"。同時,使用該參數會使用導出文件中增加創(chuàng)建庫的語句。如不帶該選項,則第二個參數將被認定為表名,即: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 將使存儲過程、函數也轉儲到文件中來。

(11)-h或--help 可以查看有哪些選項可用。

(12)--opt 如果你正將數據移動到更新版本的MySQL,你應當使用mysqldump --opt來利用各種優(yōu)化性能來產生更小、可以更快處理的轉儲文件

(更多請參考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也允許你指定在內存中創(chuàng)建它:

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%動態(tài)的(在插入時),無需溢出區(qū)和額外的鍵空間。刪除的行放入一個鏈接表并且當你把新數據插入到表時,它將被再次使用。

為了釋放內存,你應該執(zhí)行DELETE FROM heap_table或DROP TABLE heap_table。

為了保證你不會偶然做些愚蠢的事情,你不能創(chuàng)建比max_heap_table_size大的HEAP表。

什么時候用到mysqldump

如果你需要在不同的架構之間轉移數據庫,可以使用mysqldump創(chuàng)建含有SQL的文件。然后你可以將文件轉移到其它機器上,并將它輸入到MySQL客戶端。

實例

如果你想要從遠程機器通過慢速網絡復制數據庫,可以使用:

殼層> mysqladmin create db_name

shell> mysqldump -h 'other_hostname' --opt --compress db_name | mysql db_name

還可以將結果保存到文件中,然后將文件轉移到目標機器上并將文件裝載到數據庫中。例如,可以在源機器上使用下面的命令將數據庫備份到文件中:

shell> mysqldump --quick db_name | gzip > db_name.contents.gz

(該例子中創(chuàng)建的文件是壓縮格式)。將含有數據庫內容的文件到目標機上并運行命令:

shell> mysqladmin create db_nameshell> gunzip < db_name.contents.gz | mysql db_name

還可以使用mysqldump和mysqlimport來轉移數據庫。對于大的表,比只是使用mysqldump要快得多。在下面的命令中,DUMPDIR代表用來保存mysqldump輸出的目錄全路徑名。

首先,創(chuàng)建保存輸出文件的目錄并備份數據庫:

shell> mkdir DUMPDIRshell>mysqldump --tab=DUMPDIR db_name

然后將DUMPDIR目錄中的文件轉移到目標機上相應的目錄中并將文件裝載到MySQL

殼層> mysqladmin create db_name # create database

shell> cat DUMPDIR/*.SQL | mysql db_name # create tables in database

shell> mysqlimport db_name DUMPDIR/*.txt # load data into tables

不要忘記復制MySQL,因為授權表保存在該數據庫中。你可能需要在新機器上用MySQL root用戶運行命令,直到產生MySQL數據庫。

將mysql數據庫導入目標機器后,執(zhí)行mysqladmin flush-privileges,以便服務器重載授權表信息。

或者 shell > flush privileges;

參考資料 >

生活家百科家居網