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';
您可以使用各种选项更改输出格式,以指示如何引用和分隔列和记录。要以CSV格式导出tutorial_tbl表,并使用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 版本。
-
您必须具备 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服务器复制到另一个服务器,请使用 mysqldump 命令,指定数据库名称和表格名称。
在源主机上运行以下命令。这将将完整的数据库导出为 dump.txt 文件。
$ mysqldump -u root -p database_name table_name > dump.txt
password *****
您可以在不使用特定表名称的情况下复制完整数据库,正如上文所述。
现在,将 dump.txt 文件通过 FTP 上传到另一台主机,并使用以下命令。在运行此命令之前,请确保在目标服务器上已创建 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服务器。