位置:首頁 > 數據庫 > MySQL教學 > MySQL數據庫導出(備份方法)

MySQL數據庫導出(備份方法)

導出表數據到一個文本文件的最簡單方法是使用SELECT... INTO OUTFILE語句直接將導出查詢結果導出到服務器主機上的文件。

使用SELECT... INTO OUTFILE語句導出數據

語句的語法結合了常規的SELECT INTO與OUTFILE filename 末尾。默認的輸出格式與LOAD DATA是一樣的,所以下麵的語句導出 tutorials_tbl 表到C:\tutorials.txt 並使用製表符分隔,換行結尾的文件:

mysql> SELECT * FROM tutorials_tbl 
    -> INTO OUTFILE 'C:\tutorials.txt';

可以利用選項來說明如何引號和分隔列,更改記錄輸出格式。 使用CRLF為結束行導出tutorial_tbl 為CSV格式表格,使用以下語句:

mysql> SELECT * FROM passwd INTO OUTFILE 'C:\tutorials.txt'
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    -> LINES TERMINATED BY '\r\n';

SELECT... INTO OUTFILE具有以下屬性:

  • 輸出的文件是直接由MySQL服務器創建的,因此,文件名應指明想要的文件名,它會被寫到服務器主機上。還有就是語句類似於冇有LOCAL版本的LOAD DATA的本地版本。

  • 必須有MySQL的FILE權限來執行SELECT ... INTO語句。

  • 輸出文件必須還不存在。 這防止MySQL弄錯文件很重要。

  • 應該有服務器主機或某種方式來檢索該主機上登錄帳戶的文件。否則,SELECT ... INTO OUTFILE可能冇有任何值給出。

  • 在UNIX下,文件創建所有人都是可讀的,由MySQL服務器所擁有。這意味著,雖然能夠讀取該文件,可能無法將其刪除。

導出表作為原始數據

mysqldump程序用於複製或備份表和數據庫。它可以寫入表輸出作為一個原始數據文件,或為一組重新創建表中的INSERT語句的記錄。

轉儲一個表作為一個數據文件,必須指定一個--tab 選項指定目錄,讓MySQL服務器寫入文件。

例如,從數據庫test中的tutorials_tbl表轉儲到一個文件在C:\tmp目錄,可使用這樣的命令:

$ mysqldump -u root -p --no-create-info \
            --tab=c:\tmp TEST tutorials_tbl
password ******

以SQL格式導出表內容或定義

以SQL格式的表導出到一個文件,使用這樣的命令:

$ mysqldump -u root -p test tutorials_tbl > dump.txt
password ******

這將創建一個具有以下內容折文件,如下:


-- MySQL dump 8.53
--
-- Host: localhost    Database: test
---------------------------------------------------------
-- Server version       5.5.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','2012-01-04');
INSERT INTO tutorials_tbl 
       VALUES (2,'Learn MySQL','Abdul S','2015-05-14');
INSERT INTO tutorials_tbl 
       VALUES (3,'JAVA Tutorial','Sanjay','2014-05-10');

要轉儲多個表,所有數據庫名稱參數後跟它們的名字。要轉儲整個數據庫,不需要在數據庫之後命名(附加)任何表:

$ mysqldump -u root -p test > database_dump.txt
password ******

要備份所有可用的數據庫在主機上,使用以下命令:

$ mysqldump -u root -p --all-databases > database_dump.txt
password ******

--all-databases選項可在MySQL 3.23.12之後的版本使用。

該方法可用於實現數據庫的備份策略。

複製表或數據庫到另一台主機

如果想從一個MySQL服務器複製表或數據庫到另一台,使用mysqldump以及數據庫名和表名。

在源主機上運行下麵的命令。將轉儲完整的數據庫到文件dump.txt:

$ mysqldump -u root -p database_name table_name > dump.txt
password *****

可以複製完整的數據庫,而無需使用特定的表名,如上所述。

現在ftp dump.txt文件在另一台主機上,並使用下麵的命令。運行此命令之前,請確保已創建數據庫名稱在目標服務器上。

$ mysql -u root -p database_name < dump.txt
password *****

另一種方式來實現這一點,無需使用一個中間文件是來發送,mysqldump輸出直接通過網絡到遠程MySQL服務器。如果可以從源數據庫所在的主機那裡連接兩個服務器,使用此命令(請確保兩個服務器可以訪問):

$ mysqldump -u root -p database_name \
       | mysql -h other-host.com database_name

命令 mysqldump 的一半連接到本地服務器,並轉儲輸出寫入管道。另一半MySQL連接到 other-host.com 遠程MySQL服務器。它讀取管道輸入並發送每條語句到other-host.com服務器。