MySQL-数据库导入-恢复方法


MySQL 有两种简单的方法可以将数据从先前备份的文件加载到 MySQL 数据库中。

使用 LOAD DATA 导入数据

MySQL 提供了 LOAD DATA 语句作为批量数据加载器。下面是一个示例语句,它从当前目录读取文件dump.txt并将其加载到当前数据库中的表mytbl中。

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
  • 如果LOCAL关键字不存在,MySQL 使用绝对路径名在服务器主机上查找数据文件,该绝对路径名完全指定文件的位置,从文件系统的根开始。MySQL 从给定位置读取文件。

  • 默认情况下,LOAD DATA假定数据文件包含以换行符(换行符)终止的行,并且行中的数据值由制表符分隔。

  • 要显式指定文件格式,请使用FIELDS子句来描述行中字段的特征,并使用LINES子句指定行结束顺序。以下LOAD DATA语句指定数据文件包含由冒号分隔的值以及由回车符和换行符终止的行。

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
   -> FIELDS TERMINATED BY ':'
   -> LINES TERMINATED BY '\r\n';
  • LOAD DATA 命令假定数据文件中的列与表中的列具有相同的顺序。如果情况并非如此,您可以指定一个列表来指示数据文件列应加载到哪些表列中。假设您的表具有列 a、b 和 c,但数据文件中的连续列对应于列 b、c 和 a。

您可以加载该文件,如以下代码块所示。

mysql> LOAD DATA LOCAL INFILE 'dump.txt' 
   -> INTO TABLE mytbl (b, c, a);

使用 mysqlimport 导入数据

MySQL 还包括一个名为mysqlimport的实用程序,它充当 LOAD DATA 的包装器,以便您可以直接从命令行加载输入文件。

要将数据从dump.txt加载到mytbl中,请在 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 *****

处理引号和特殊字符

FIELDS 子句可以指定除TERMINATED BY之外的其他格式选项。默认情况下,LOAD DATA 假定值不带引号,并将反斜杠 (\) 解释为特殊字符的转义字符。要明确指示引用字符的值,请使用ENCLOSED BY命令。MySQL 会在输入处理期间从数据值的末尾去除该字符。要更改默认转义字符,请使用ESCAPED BY

当您指定 ENCLOSED BY 来指示应从数据值中删除引号字符时,可以通过将引号字符加倍或在其前面添加转义字符,将引号字符逐字包含在数据值中。

例如,如果引号和转义字符为 " 和 \,则输入值"a""b\"c"将被解释为a"b"c

对于mysqlimport,用于指定引号和转义值的相应命令行选项是--fields-enclosure-by--fields-escaped-by