PHP开发教程

MySQL数据库导出

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

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

语句的语法结合了常规的SELECT INTO与OUTFILE filename 末尾。默认的输出格式与LOAD DATA是一样的,所以下面的语句导出 tutorials_tbl 表到C:\tutorials.txt 并使用制表符分隔,换行结尾的文件:

mysql> SELECT * FROM tutorials_tbl 
    -> INTO OUTFILE 'C:\tutorials.txt';

可以利用选项来说明如何引号和分隔列,更改记录输出格式。 使用CRLF为结束行导出tutorial_tbl 为CSV格式表格,使用以下语句:

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

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

  • 输出的文件是直接由MySQL服务器创建的,因此,文件名应指明想要的文件名,它会被写到服务器主机上。还有就是语句类似于没有LOCAL版本的LOAD DATA的本地版本。

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

  • 输出文件必须还不存在。 这防止MySQL弄错文件很重要。

  • 应该有服务器主机或某种方式来检索该主机上登录帐户的文件。否则,SELECT ... INTO OUTFILE可能没有任何值给出。

  • 在UNIX下,文件创建所有人都是可读的,由MySQL服务器所拥有。这意味着,虽然能够读取该文件,可能无法将其删除。

导出表作为原始数据

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

转储一个表作为一个数据文件,必须指定一个--tab 选项指定目录,让MySQL服务器写入文件。

例如,从数据库test中的tutorials_tbl表转储到一个文件在C:\tmp目录,可使用这样的命令:

$ mysqldump -u root -p --no-create-info \            
--tab=c:\tmp TEST tutorials_tbl
password ******

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

以SQL格式的表导出到一个文件,使用这样的命令:

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

这将创建一个具有以下内容折文件,如下:


-- MySQL dump 8.53
--
-- Host: localhost    Database: test
---------------------------------------------------------
-- Server version       5.5.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','2012-01-04');
INSERT INTO tutorials_tbl 
       VALUES (2,'Learn MySQL','Abdul S','2015-05-14');
INSERT INTO tutorials_tbl 
       VALUES (3,'JAVA Tutorial','Sanjay','2014-05-10');

要转储多个表,所有数据库名称参数后跟它们的名字。要转储整个数据库,不需要在数据库之后命名(附加)任何表:

$ mysqldump -u root -p test > 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文件在另一台主机上,并使用下面的命令。运行此命令之前,请确保已创建数据库名称在目标服务器上。

$ 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 的一半连接到本地服务器,并转储输出写入管道。另一半MySQL连接到 other-host.com 远程MySQL服务器。它读取管道输入并发送每条语句到other-host.com服务器。


Powered by PHP二次开发 ©2008-2017