MySQL - 数据库导出

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

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

此语句的语法将常规 SELECT 命令与

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


您可以使用各种选项更改输出格式,以指示如何引用和分隔列和记录.要使用CRLF终止的行以CSV格式导出tutorial_tbl表,请使用以下代码.

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


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

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

  • 您必须具有 MySQL FILE 权限才能执行 SELECT ... INTO 声明.

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

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

  • 在UNIX下,文件被创建 world可读并由MySQL服务器拥有.这意味着虽然您将能够读取该文件,但您可能无法将其删除.

将表导出为原始数据

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

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

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

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


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

导出a将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 ******


MySQL 3.23.12版本中提供了--all-databases选项.此方法可用于实现数据库备份策略.

将表或数据库复制到另一个主机

如果要从中复制表或数据库一个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中,一半命令连接到本地服务器并将转储输出写入管道.该命令的剩余一半连接到otherhost.com上的远程MySQL服务器.它读取输入管道并将每个语句发送到otherhost.com服务器.