Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

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

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

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

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

启动命令:

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_directories扫描也会遍历指定目录的子目录。重复的目录和子目录将从要扫描的目录列表中删除。

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

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

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

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

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

  • 将文件每个表和通用表空间的目录添加到innodb_directories设置中。否则,InnoDB无法在恢复期间定位文件。有关信息,请参阅崩溃恢复期间的表空间发现

    要查看表空间文件位置,请查询信息模式FILES表:

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