將表中數(shù)據(jù)導(dǎo)出為一個(gè)文本文件,最簡(jiǎn)單的方法是用 SELECT...INTO OUTFILE 語句,它會(huì)將查詢結(jié)果直接導(dǎo)出為服務(wù)器主機(jī)上的一個(gè)文件。
該語句組合的語法為:使用正常的 SELECT 語句,后跟 INTO OUTFILE,最后加上要導(dǎo)出的文件名。默認(rèn)的輸出格式和 LOAD DATA 一樣,因此下列語句會(huì)將表 tutorials_tbl 導(dǎo)出為 /tmp/tutorials.txt,其中的數(shù)據(jù)以制表符分隔開,以換行符作為每行的終止符。
mysql> SELECT * FROM tutorials_tbl
-> INTO OUTFILE '/tmp/tutorials.txt';
你可以通過一些選項(xiàng)來改變輸出格式,來指定如何以引用并限定列與記錄。下面這個(gè)例子將表 tutorials_tbl 以逗號(hào)分隔各值,以 CRLF(回車換行符)來作為行的終止符:
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
SELECT ... INTO OUTFILE 具有下列特點(diǎn):
mysqldump 程序用于復(fù)制或備份表與數(shù)據(jù)庫。它能把表輸出為一個(gè)原始數(shù)據(jù)文件,或者是一個(gè)能重建表中記錄的 INSERT 語句集合。
要想把表轉(zhuǎn)儲(chǔ)為一個(gè)數(shù)據(jù)文件,必須指定一個(gè) --tab 選項(xiàng),用它來指明 MySQL 服務(wù)器寫入文件的目錄。
例如,把數(shù)據(jù)庫 TUTORIALS 中的表 tutorials_tbl 轉(zhuǎn)儲(chǔ)為 /tmp 中的一個(gè)文件,需要使用如下命令:
$ mysqldump -u root -p --no-create-info \
--tab=/tmp TUTORIALS tutorials_tbl
password ******
以 SQL 格式將表導(dǎo)出為文件,使用類似下列命令:
$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txt
password ******
這樣創(chuàng)建的文件將包含如下內(nèi)容:
-- MySQL dump 8.23
--
-- Host: localhost Database: TUTORIALS
---------------------------------------------------------
-- Server version 3.23.58
--
-- Table structure for table `tutorials_tbl`
--
CREATE TABLE tutorials_tbl (
tutorial_id int(11) NOT NULL auto_increment,
tutorial_title varchar(100) NOT NULL default '',
tutorial_author varchar(40) NOT NULL default '',
submission_date date default NULL,
PRIMARY KEY (tutorial_id),
UNIQUE KEY AUTHOR_INDEX (tutorial_author)
) TYPE=MyISAM;
--
-- Dumping data for table `tutorials_tbl`
--
INSERT INTO tutorials_tbl
VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO tutorials_tbl
VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO tutorials_tbl
VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');
轉(zhuǎn)儲(chǔ)多張表,按照數(shù)據(jù)庫命名》》。轉(zhuǎn)儲(chǔ)整個(gè)數(shù)據(jù)庫,不需要命名數(shù)據(jù)庫中的任何表:
$ mysqldump -u root -p TUTORIALS > database_dump.txt
password ******
備份主機(jī)上的所有數(shù)據(jù)庫,使用如下命令:
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******
自MySQL 3.23.12版本開始,可以使用 --all-databases 選項(xiàng)。
這種方法可以實(shí)現(xiàn)數(shù)據(jù)庫備份。
如果想把一臺(tái) MySQL 服務(wù)器上的表或數(shù)據(jù)庫復(fù)制到另一臺(tái)主機(jī)上,可以使用 mysqldump 程序,加上數(shù)據(jù)庫名稱和表名稱。
在源主機(jī)上運(yùn)行以下命令,它會(huì)將整個(gè)數(shù)據(jù)庫都轉(zhuǎn)儲(chǔ)到 dump.txt 文件中。
$ mysqldump -u root -p database_name table_name > dump.txt
password *****
如前所述,你可以將整個(gè)數(shù)據(jù)庫都復(fù)制下來,無需使用任何具體的表名稱。
接下來,在另一臺(tái)主機(jī)上ftp dump.txt 文件,并運(yùn)行如下命令。在運(yùn)行這行命令之前,先要確保已經(jīng)在目標(biāo)服務(wù)器上創(chuàng)建了 database_name。
$ mysql -u root -p database_name < dump.txt
password *****
在主機(jī)間復(fù)制數(shù)據(jù)庫也可以使用另一種方法,它的優(yōu)點(diǎn)就是無需使用中介文件。將 mysqldump的輸出結(jié)果直接通過網(wǎng)絡(luò)傳到遠(yuǎn)端的 MySQL 服務(wù)器上。如果你能從源數(shù)據(jù)庫所在的主機(jī)上連接到兩個(gè)服務(wù)器上,使用如下命令(一定要確保你能訪問兩臺(tái)服務(wù)器):
$ mysqldump -u root -p database_name \
| mysql -h other-host.com database_name
以上命令的 mysqldump 部分會(huì)連接本地服務(wù)器,將轉(zhuǎn)儲(chǔ)結(jié)果寫入管線。剩下的命令連接到另一臺(tái)主機(jī)的遠(yuǎn)端服務(wù)器上,讀取管線上傳來的轉(zhuǎn)儲(chǔ)結(jié)果,將每個(gè)語句送到目的主機(jī)所在的服務(wù)器上。