將表中數(shù)據(jù)導(dǎo)出為一個文本文件,最簡單的方法是用 SELECT...INTO OUTFILE 語句,它會將查詢結(jié)果直接導(dǎo)出為服務(wù)器主機上的一個文件。
該語句組合的語法為:使用正常的 SELECT 語句,后跟 INTO OUTFILE,最后加上要導(dǎo)出的文件名。默認(rèn)的輸出格式和 LOAD DATA 一樣,因此下列語句會將表 tutorials_tbl 導(dǎo)出為 /tmp/tutorials.txt,其中的數(shù)據(jù)以制表符分隔開,以換行符作為每行的終止符。
mysql> SELECT * FROM tutorials_tbl
-> INTO OUTFILE '/tmp/tutorials.txt';
你可以通過一些選項來改變輸出格式,來指定如何以引用并限定列與記錄。下面這個例子將表 tutorials_tbl 以逗號分隔各值,以 CRLF(回車換行符)來作為行的終止符:
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
SELECT ... INTO OUTFILE 具有下列特點:
mysqldump 程序用于復(fù)制或備份表與數(shù)據(jù)庫。它能把表輸出為一個原始數(shù)據(jù)文件,或者是一個能重建表中記錄的 INSERT 語句集合。
要想把表轉(zhuǎn)儲為一個數(shù)據(jù)文件,必須指定一個 --tab 選項,用它來指明 MySQL 服務(wù)器寫入文件的目錄。
例如,把數(shù)據(jù)庫 TUTORIALS 中的表 tutorials_tbl 轉(zhuǎn)儲為 /tmp 中的一個文件,需要使用如下命令:
$ 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)儲多張表,按照數(shù)據(jù)庫命名》》。轉(zhuǎn)儲整個數(shù)據(jù)庫,不需要命名數(shù)據(jù)庫中的任何表:
$ mysqldump -u root -p TUTORIALS > database_dump.txt
password ******
備份主機上的所有數(shù)據(jù)庫,使用如下命令:
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******
自MySQL 3.23.12版本開始,可以使用 --all-databases 選項。
這種方法可以實現(xiàn)數(shù)據(jù)庫備份。
如果想把一臺 MySQL 服務(wù)器上的表或數(shù)據(jù)庫復(fù)制到另一臺主機上,可以使用 mysqldump 程序,加上數(shù)據(jù)庫名稱和表名稱。
在源主機上運行以下命令,它會將整個數(shù)據(jù)庫都轉(zhuǎn)儲到 dump.txt 文件中。
$ mysqldump -u root -p database_name table_name > dump.txt
password *****
如前所述,你可以將整個數(shù)據(jù)庫都復(fù)制下來,無需使用任何具體的表名稱。
接下來,在另一臺主機上ftp dump.txt 文件,并運行如下命令。在運行這行命令之前,先要確保已經(jīng)在目標(biāo)服務(wù)器上創(chuàng)建了 database_name。
$ mysql -u root -p database_name < dump.txt
password *****
在主機間復(fù)制數(shù)據(jù)庫也可以使用另一種方法,它的優(yōu)點就是無需使用中介文件。將 mysqldump的輸出結(jié)果直接通過網(wǎng)絡(luò)傳到遠(yuǎn)端的 MySQL 服務(wù)器上。如果你能從源數(shù)據(jù)庫所在的主機上連接到兩個服務(wù)器上,使用如下命令(一定要確保你能訪問兩臺服務(wù)器):
$ mysqldump -u root -p database_name \
| mysql -h other-host.com database_name
以上命令的 mysqldump 部分會連接本地服務(wù)器,將轉(zhuǎn)儲結(jié)果寫入管線。剩下的命令連接到另一臺主機的遠(yuǎn)端服務(wù)器上,讀取管線上傳來的轉(zhuǎn)儲結(jié)果,將每個語句送到目的主機所在的服務(wù)器上。