📜  MySQL-数据库导出

📅  最后修改于: 2020-11-27 06:43:43             🧑  作者: Mango


将表数据导出到文本文件的最简单方法是使用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';

您可以使用各种选项来更改输出格式,以指示如何对列和记录进行引用和定界。要以带有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服务器直接创建的,因此文件名应指示您要在服务器主机上写入文件的位置。没有类似于LOAD DATALOCAL版本的语句的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 *****

您可以在不使用特定表名的情况下复制完整的数据库,如上所述。

现在,在另一台主机上使用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服务器。