在上一章mysql教程中我们讨论了使用自动递增序列以及处理重复数据,这一章我们讨论mysql数据库导出和导入操作的详细步骤。
一、数据库导出操作【mysql开发深入浅出(数据库导出和导入数据操作详细操作步骤)】将表数据导出到文本文件的最简单方法是使用SELECT…INTO OUTFILE将查询结果直接导出到服务器主机上的文件中的语句。
1、使用SELECT…INTO OUTFILE导出数据
该语句的语法将一个普通的SELECT命令与OUTFILE文件名组合在一起,默认的输出格式与LOAD DATA命令的输出格式相同。因此下面的语句将sample表导出为/tmp/sample.txt,作为一个以制表符分隔结尾的文件。
mysql> SELECT * FROM sample
-> INTO OUTFILE '/tmp/sample.txt';
可以使用各种选项更改输出格式,以指示如何引用和分隔列和记录,要使用以crlf结尾的行以CSV格式导出sample表,请使用以下代码。
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/sample.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
SELECT……INTO OUTFILE具有以下属性:
- 输出文件是由MySQL服务器直接创建的,因此文件名应该指示在服务器主机上要将文件写入的位置,没有类似于LOAD DATA的本地版本的语句的本地版本。
- 必须拥有MySQL文件权限才能执行SELECT…INTO声明。
- 输出文件必须不存在,这可以防止MySQL破坏可能很重要的文件。
- 你应该在服务器主机上有一个登录帐户,或者以某种方式从该主机检索文件。
- 在UNIX下创建的文件是可读的属于MySQL服务器,这意味着虽然你可以读取文件,但可能无法删除它。
mysqldump可以将表输出作为原始数据文件,也可以将其作为一组插入语句来重新创建表中的记录复制或备份表和数据库。
要将一个表转储为数据文件,必须指定一个——选项卡选项,该选项表示希望MySQL服务器在其中写入文件的目录。
例如要将sample表从教程数据库转储到/tmp目录下的文件中,可以使用如下所示的命令。
$ mysqldump -u root -p --no-create-info \
--tab=/tmp post sample
password ******
3、以SQL格式导出表内容
要将SQL格式的表导出到文件,请使用以下命令。
$ mysqldump -u root -p POST sample > dump.txt
password ******
要转储多个表请将它们都命名为后跟数据库名称参数,要转储整个数据库,不要按照下面代码块中所示的那样在数据库之后命名任何表。
$ mysqldump -u root -p POST > database_dump.txt
password ******
备份所有数据库的数据如下:
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******
4、将表或数据库复制到另一个主机
如果希望将表或数据库从一个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服务器。
二、mysql导入数据操作在MySQL中有两种简单的方法将数据从以前备份的文件加载到MySQL数据库中。
1、LOAD DATA导入数据
MySQL提供了一个LOAD DATA语句,它充当一个批量数据加载器。下面是一个示例语句,它从当前目录中读取文件dump.txt并将其加载到当前数据库中的表sample中。
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE sample;
- 如果没有LOCAL关键字MySQL使用查找绝对路径名在服务器主机上查找数据文件,该路径名完全指定文件的位置,从文件系统的根开始,MySQL从给定位置读取文件。
- 默认情况下LOAD DATA假定数据文件包含由换行符(换行符)终止的行,并且行中的数据值由制表符分隔。
- 要显式地指定文件格式,可以使用FIELDS子句来描述行中字段的特征,使用LINES子句来指定行结束序列。下面的LOAD DATA语句指定数据文件包含冒号分隔的值和以回车和换行符结束的行。
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE sample
-> FIELDS TERMINATED BY ':'
-> LINES TERMINATED BY '\r\n';
导入指定列可以按如下代码块所示加载文件。
mysql> LOAD DATA LOCAL INFILE 'dump.txt'
-> INTO TABLE sample (b, c, a);
2、使用mysqlimport导入数据
MySQL还包括一个名为mysqlimport的实用程序,它充当装载数据的包装器,因此你可以直接从命令行导入输入文件。要将dump.txt中的数据加载到sample中,请在UNIX提示符下使用以下命令。
$ mysqlimport -u root -p --local database_name dump.txt
password *****
如果使用mysqlimport命令行选项提供格式说明符,与前两个LOAD DATA语句对应的mysqlimport命令如下面的代码块所示。
$ mysqlimport -u root -p --local --fields-terminated-by = ":" \
--lines-terminated-by = "\r\n"database_name dump.txt
password *****
对于mysqlimport来说指定选项的顺序并不重要,mysqlimport语句使用——columns选项来指定列的顺序:
$ mysqlimport -u root -p --local --columns=b,c,a \
database_name dump.txt
password *****
3、处理引号和特殊字符
FIELDS子句可以指定除终止符BY之外的其他格式选项,默认情况下LOAD DATA假设值是未加引号的,并将反斜杠(\)解释为特殊字符的转义字符。若要显式指示值引用字符,请使用所包含的BY命令。MySQL将在输入处理期间从数据值的末端删除该字符。若要更改默认的转义字符,请使用escape BY。
以将引号字符按字面意思包含在数据值中,方法是将其加倍或在其前面加上转义字符。
例如如果引号和转义字符是“and”,那么输入值“a”“b”“c”将被解释为“b”c。
对于mysqlimport用于指定引号和转义值的相应命令行选项是——fields-enclosed-by和——fields-escaped-by。
推荐阅读
- 为什么使用Quill( — Quill富文本编辑器快速入门中文文档)
- mysql开发细节(使用自动递增序列以及处理重复数据)
- 什么是sql注入(一分钟快速理解mysql sql注入)
- mysql复制表操作和数据库元数据介绍
- mysql alter命令和mysql索引介绍
- mysql事务操作介绍和临时表的使用
- mysql基本增删改查、所有查询子句以及连接查询完全解读
- MySQL开发教程(数据类型、数据库连接、基本数据库和表操作详解)
- MySQL基本管理介绍和在PHP中使用MySQL