Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Moving Tablespace Files While the Server is Offline

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

变量innodb_directories,在启动时定义要扫描的目录,以便查找表空间文件,可以在服务器离线时移动或恢复表空间文件到新位置。在启动时,发现的表空间文件将被使用,而不是数据字典中所引用的文件,并且数据字典将被更新以引用 relocated 文件。如果扫描过程中发现重复的表空间文件,启动失败并显示错误信息,指出多个文件为同一个表空间 ID。

innodb_data_home_dirinnodb_undo_directorydatadir变量定义的目录将自动追加到innodb_directories参数值中。这些目录在启动时无论是否指定了innodb_directories设置都会被扫描。隐式地添加这些目录允许将系统表空间文件、数据目录或undo表空间文件移动到新的位置,而无需配置innodb_directories设置。但是,需要在目录更改时更新设置。例如,在重新定位数据目录后,您必须更新--datadir设置,然后重启服务器。

可以在启动命令或MySQL选项文件中指定innodb_directories变量。因为某些命令解释器将分号 (;) 解释为特殊字符(例如,Unix shells将其视为命令终止符),因此使用引号 around the argument value。

启动命令:

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

MySQL选项文件:

[mysqld]
innodb_directories="directory_path_1;directory_path_2"

以下过程适用于移动单个文件表通用表空间文件、系统表空间文件、回滚表空间文件或数据目录。移动文件或目录前,请查看以下使用说明。

  1. 停止服务器。

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

  3. 使新目录被InnoDB知道。

  4. 重启服务器。

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

  • InnoDB 目录扫描也会遍历指定目录的子目录。重复的目录和子目录将从要扫描的目录列表中被忽略。

  • innodb_directories 支持移动 InnoDB 表空间文件。移动属于其他存储引擎的文件(除了 InnoDB)不受支持。这一限制也适用于移动整个数据目录。

  • innodb_directories 支持将表空间文件重命名到扫描目录中,并且支持将表空间文件移动到其他支持的操作系统上。

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

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

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

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

    查看表空间文件位置,可以查询信息_schemaFILES表:

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