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服務器。