Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.6 InnoDB 磁盘结构  / 15.6.3 表空间  /  15.6.3.6 在服务器离线时移动表空间文件

15.6.3.6 在服务器离线时移动表空间文件

innodb_directories变量定义了在启动时扫描表空间文件的目录,支持在服务器离线时将表空间文件移动或恢复到新位置。在启动期间,使用发现的表空间文件代替数据字典中引用的表空间文件,并且更新数据字典以引用重定位的文件。如果扫描发现重复的表空间文件,则启动失败并显示错误,指示为同一表空间 ID 找到了多个文件。

innodb_data_home_dirinnodb_undo_directory和 变量 定义的目录 datadir会自动附加到 innodb_directories参数值。无论是否innodb_directories 明确指定设置,都会在启动时扫描这些目录。这些目录的隐式添加允许在不配置 innodb_directories设置的情况下移动系统表空间文件、数据目录或撤消表空间文件。但是,目录更改时必须更新设置。例如,在重新定位数据目录后,您必须 --datadir在重新启动服务器之前更新设置。

innodb_directories变量可以在启动命令或 MySQL 选项文件中指定。在参数值两边使用引号是因为分号 (;) 被某些命令解释器解释为特殊字符。(例如,Unix shell 将其视为命令终止符。)

启动命令:

mysqld --innodb-directories="directory_path_1;directory_path_2"

MySQL选项文件:

[mysqld]
innodb_directories="directory_path_1;directory_path_2"

以下过程适用于移动单个 file-per-table通用表空间 文件、系统表空间文件、撤消表空间文件或数据目录。在移动文件或目录之前,请查看下面的使用说明。

  1. 停止服务器。

  2. 将表空间文件或目录移动到所需位置。

  3. 使新目录为InnoDB.

  4. 重新启动服务器。

使用说明
  • innodb_directories参数值 中不能使用通配符表达式 。

  • 扫描还遍历指定目录的innodb_directories子目录。从要扫描的目录列表中丢弃重复的目录和子目录。

  • innodb_directories支持移动InnoDB表空间文件。InnoDB不支持移动属于非存储引擎的文件 。当移动整个数据目录时,此限制也适用。

  • innodb_directories支持在将文件移动到扫描目录时重命名表空间文件。它还支持将表空间文件移动到其他受支持的操作系统。

  • 将表空间文件移动到不同的操作系统时,请确保表空间文件名不包含禁止字符或在目标系统上具有特殊含义的字符。

  • 将数据目录从 Windows 操作系统移动到 Linux 操作系统时,修改二进制日志索引文件中的二进制日志文件路径以使用反斜杠而不是正斜杠。默认情况下,二进制日志索引文件与二进制日志文件具有相同的基本名称,扩展名为“ .index”。二进制日志索引文件的位置由 --log-bin. 默认位置是数据目录。

  • 如果将表空间文件移动到不同的操作系统会引入跨平台复制,则数据库管理员有责任确保正确复制包含平台特定目录的 DDL 语句。允许指定目录的语句包括 CREATE TABLE ... DATA DIRECTORYCREATE TABLESPACE ... ADD DATAFILE

  • 将使用绝对路径或在数据目录之外的位置创建的 file-per-table 和通用表空间的目录添加到 innodb_directories设置中。否则,InnoDB在恢复期间无法找到文件。有关相关信息,请参阅 崩溃恢复期间的表空间发现

    要查看表空间文件位置,请查询 INFORMATION_SCHEMA.FILES表:

    mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES \G