10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

13.2.5 IMPORT TABLE语句

进口表sdi_file(,sdi_file)……

导入表声明进口MyISAM表中所包含的信息.sdi(序列化字典信息)元数据文件。导入表要求文件有权阅读.sdi和表内容文件,以及创建要创建的表的特权。

表可以从一个服务器导出, mysqldump编写一个SQL语句文件,并导入到另一个服务器使用mysql处理转储文件。导入表方法提供更快的替代方案表文件。

在导入之前,提供表内容的文件必须放在导入服务器的适当模式目录中.sdi文件必须位于服务器可访问的目录中。例如,.sdi文件可以放置在由secure_file_priv系统变量,或(ifsecure_file_priv为空),位于服务器数据目录下的目录中。

下面的示例介绍如何导出MyISAM表命名员工而且经理人力资源模式,并将它们导入到人力资源其他服务器的模式。这个例子使用了这些假设(在您自己的系统上执行类似的操作,根据需要修改路径名):

  • 对于导出服务器,export_basedir表示其基目录,其数据目录为export_basedir/数据

  • 对于导入服务器,import_basedir表示其基目录,其数据目录为import_basedir/数据

  • 表文件从导出服务器导出到/ tmp /出口目录,该目录是安全的(其他用户无法访问)。

  • 导入服务器使用/ tmp / mysql-files作为其命名的目录secure_file_priv系统变量。

要从导出服务器导出表,请使用以下步骤:

  1. 通过执行以下语句锁定表,确保快照的一致性,这样在导出时表就不能被修改:

    mysql> FLUSH TABLES。员工,人力资源。经理WITH READ LOCK;

    当锁生效时,仍然可以使用表,但只能用于读访问。

  2. 在文件系统级别,复制.sdi的表内容文件人力资源架构目录到安全导出目录:

    • .sdi文件位于人力资源架构目录,但可能具有与表名完全相同的基名。例如,.sdi文件员工而且经理表可能被命名为employees_125.sdi而且managers_238.sdi

    • 对于一个MyISAM表中,内容文件是它的.MYD数据文件和.MYI索引文件。

    给定这些文件名,复制命令如下所示:

    壳> cdexport_basedir/data/hr shell> cp employees_125. shSdi /tmp/export shell> cp managers_238. shSdi /tmp/export shell> cp employees. sh见这种情况称之为{MYD,多年并}/ tmp /出口shell> cp managers.{MYD,MYI} /tmp/export
  3. 打开表:

    mysql >解锁表;

要将表导入到导入服务器,请使用以下步骤:

  1. 导入模式必须存在。如果需要,执行以下语句来创建它:

    mysql创建模式;
  2. 在文件系统级别,复制.sdi文件到导入服务器secure_file_priv目录,/ tmp / mysql-files.对象中复制表内容文件人力资源模式目录:

    Shell > CD /tmp/export Shell > cp employees_125. shSdi /tmp/mysql-files shell> cp managers_238. shsdi /tmp/mysql-files shell> cp employees.{MYD,MYI}import_basedir/data/hr shell> cp managers.{MYD,MYI}import_basedir/数据/人力资源
  3. 通过执行命令导入表导入表语句,该语句指定.sdi文件:

    mysql> IMPORT TABLE FROM '/tmp/mysql-files/employees。sdi”、“/ tmp / mysql-files / managers.sdi”;

.sdi控件命名的导入服务器目录中不必放置secure_file_priv系统变量,如果该变量为空;它可以位于服务器可访问的任何目录中,包括导入表的架构目录。如果.sdi文件被放置在该目录中,但是,它可以被重写;导入操作将创建一个新的.sdi文件,它将覆盖旧的.sdi文件,如果操作对新文件使用相同的文件名。

每一个sdi_file值必须是命名为.sdi文件或匹配的模式.sdi文件。如果字符串是模式,则任何前目录路径和.sdi文件名后缀必须按字面意思给出。模式字符只允许出现在文件名的基名部分:

  • ?匹配任何单个字符

  • 匹配任何字符序列,不包括字符

使用一个模式,前一个导入表语句可以写成这样(假设/ tmp / mysql-files目录中不包含其他.sdi匹配模式的文件):

IMPORT TABLE FROM /tmp/mysql-files/*.sdi

解释…的位置.sdi文件路径名,服务器使用相同的规则导入表作为服务器端的规则加载数据(即非当地的规则)。看到第13.2.7节“LOAD DATA语句”,特别注意用于解释相对路径名的规则。

导入表没有如果.sdi或者无法定位表文件。导入表后,服务器尝试打开它,并将检测到的任何问题作为警告报告。要尝试修复以纠正任何报告的问题,请使用修理表

导入表不写入二进制日志。

限制和局限性

导入表仅适用于非临时MyISAM表。它不适用于使用事务性存储引擎创建的表创建临时表或视图。

一个.sdi导入操作中使用的文件必须在与导入服务器具有相同数据字典版本和sdi版本的服务器上生成。生成服务器的版本信息可在.sdi文件:

{"mysqld_version_id":80019, "dd_version":80017, "sdi_version":80016,…}

要确定导入服务器的数据字典和sdi版本,可以检查.sdi导入服务器上最近创建的表的文件。

表数据和索引文件必须在导入操作之前放在导入服务器的架构目录中,除非在导出服务器上定义的表使用数据目录索引目录表选择。在这种情况下,在执行导入表声明:

  • 将数据和索引文件放在导入服务器主机上与导出服务器主机上相同的目录中,并在导入服务器架构目录中创建指向这些文件的符号链接。

  • 将数据和索引文件放在导入服务器主机目录中,而不是导出服务器主机上的目录中,并在导入服务器架构目录中创建指向这些文件的符号链接。另外,修改.sdi文件来反映不同的文件位置。

  • 将数据和索引文件放入导入服务器主机上的架构目录中,并修改.sdi文件以删除数据和索引目录表选项。

对象中存储的任何排序规则id.sdi文件必须引用导出和导入服务器上相同的排序规则。

表的触发器信息没有序列化到表中.sdi文件,因此触发器不会通过导入操作恢复。

对an的一些编辑.sdi文件在执行导入表语句,而其他语句则有问题,甚至可能导致导入操作失败:

  • 如果数据和索引文件的位置在导出服务器和导入服务器之间不同,则需要更改数据目录和索引目录表选项。

  • 为了将表导入到导入服务器上与导出服务器上不同的模式中,需要更改模式名称。

  • 可能需要更改模式和表名,以适应导出服务器和导入服务器上文件系统区分大小写语义之间的差异或中的差异lower_case_table_names设置。中更改表名.sdi文件可能还需要重命名表文件。

  • 在某些情况下,允许更改列定义。更改数据类型可能会导致问题。