MySQL – 数据库导出
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';
您可以使用各种选项更改输出格式,以指示如何引用和分隔列和记录。要使用 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 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 服务器复制到另一台,请使用带有数据库名称和表名称的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 服务器。