MySQL数据库导出


将表格数据导出到文本文件的最简单方法是使用SELECT ... INTO OUTFILE 将查询结果直接导出到服务器主机上的文件中的语句。

使用SELECT ... INTO OUTFILE语句导出数据


该语句的语法结合了常规SELECT用命令INTO OUTFILE文件名在最后。默认输出格式与LOAD DATA命令相同。因此,以下语句导出newbiego_tbl表成/tmp/newbiego.txt以制表符分隔的,以换行符结尾的文件。

mysql> SELECT * FROM newbiego_tbl 
    -> INTO OUTFILE '/tmp/newbiego.txt';

你可以使用各种选项来更改输出格式,以指示如何对列和记录进行引用和定界。要以带有CRLF终止行的CSV格式导出newbiego_tbl表,请使用以下代码。

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/newbiego.txt'
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    -> LINES TERMINATED BY '\r\n';

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

  • 输出文件是由MySQL服务器直接创建的,所以文件名应指出你希望文件写在服务器主机上的位置,没有类似于LOAD DATA的LOCAL版本的语句。

  • 你必须有MySQL FILE执行权限SELECT ... INTO语句。

  • 输出文件必须不存在。这样可以防止MySQL破坏可能很重要的文件。

  • 你应该在服务器主机上具有登录帐户,或通过某种方式从该主机检索文件。否则,SELECT ... INTO OUTFILE该命令很可能对你没有任何价值。

  • 在UNIX下,该文件被创建为全部用户可读文件,由MySQL服务器拥有。这意味着,尽管你将能够读取该文件,但你可能无法删除它。。

将表导出为原始数据


mysqldump该程序用于复制或备份表和数据库。它可以将表输出写为原始数据文件或作为一组INSERT在表中重新创建记录的语句。

要将表转储为数据文件,必须指定一个--tab该选项指示目录,你希望MySQL服务器在该目录中写入文件。

例如,要转储newbiego_tbl从表伴奏数据库到文件中/tmp目录,使用如下所示的命令。

$ mysqldump -u root -p --no-create-info \
    --tab=/tmp newbiego newbiego_tbl
password ******

以SQL格式导出表内容或定义


要将SQL格式的表导出到文件,请使用以下命令。

$ mysqldump -u root -p TUTORIALS newbiego_tbl > dump.txt
password ******

这将创建一个具有如下所示内容的文件。

-- MySQL dump 8.23
--
-- Host: localhost    Database: TUTORIALS
---------------------------------------------------------
-- Server version       3.23.58

--
-- Table structure for table `newbiego_tbl`
--

CREATE TABLE newbiego_tbl (
    newbiego_id int(11) NOT NULL auto_increment,
    newbiego_title varchar(100) NOT NULL default '',
    newbiego_author varchar(40) NOT NULL default '',
    submission_date date default NULL,
    PRIMARY KEY  (newbiego_id),
    UNIQUE KEY AUTHOR_INDEX (newbiego_author)
) TYPE = MyISAM;

--
-- Dumping data for table `newbiego_tbl`
--

INSERT INTO newbiego_tbl 
    VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO newbiego_tbl 
    VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO newbiego_tbl 
    VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');

要转储多个表,请将它们全部命名,后跟数据库名称参数。要转储整个数据库,请不要在数据库后命名任何表,如以下代码块所示。

$ mysqldump -u root -p TUTORIALS > 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文件,并使用以下命令。在运行此命令之前,请确保已在目标服务器上创建了database_name。

$ 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中,一半的命令连接到本地服务器,并将转储输出写入管道。该命令的其余一半将连接到other-host.com上的远程MySQL服务器。它读取用于输入的管道,并将每个语句发送到other-host.com服务器。