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.txtmytbl,在UNIX提示符下使用以下命令。

$ mysqlimport -u root -p --local database_name dump.txt
password *****

如果你使用mysqlimport,命令行选项提供格式说明符。这mysqlimport与前两个相对应的命令LOAD DATA语句看起来如下面的代码块所示。

$ 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-enclosed-by--fields-escaped-by。