MySQL - 数据库导出


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

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

该语句的语法将常规SELECT命令与末尾的INTO OUTFILE 文件名结合起来。默认输出格式与 LOAD DATA 命令的输出格式相同。因此,以下语句将tutorials_tbl表作为制表符分隔、换行符终止的文件导出到/tmp/tutorials.txt中。

mysql> SELECT * FROM tutorials_tbl 
   -> INTO OUTFILE '/tmp/tutorials.txt';

您可以使用各种选项更改输出格式,以指示如何引用和分隔列和记录。要将tutorial_tbl表导出为CSV格式并包含以CRLF结尾的行,请使用以下代码。

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

SELECT ... INTO OUTFILE具有以下属性 -

  • 输出文件由 MySQL 服务器直接创建,因此文件名应指示您希望将文件写入服务器主机上的位置。没有类似于LOAD DATA的 LOCAL 版本的语句的LOCAL版本。

  • 您必须具有MySQL FILE权限才能执行SELECT ... INTO语句。

  • 输出文件不得已存在。这可以防止 MySQL 破坏可能重要的文件。

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

  • 在 UNIX 下,该文件被创建为世界可读并且由 MySQL 服务器拥有。这意味着虽然您可以读取该文件,但可能无法删除它。

将表导出为原始数据

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

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

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

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

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

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

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

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

-- 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');

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

$ 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 服务器复制到另一台 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 服务器。