变量 innodb_directories
,定义了在启动时扫描的目录,以查找表空间文件,支持在服务器离线时移动或恢复表空间文件到新位置。在启动时,发现的表空间文件将被用于代替数据字典中的文件,并更新数据字典以引用重新定位的文件。如果发现了重复的表空间文件,启动将失败,并显示错误信息,指出发现了多个文件属于同一个表空间 ID。
由 innodb_data_home_dir
、innodb_undo_directory
和 datadir
变量定义的目录将自动追加到 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"
以下过程适用于移动单个 文件每表 和 通用表空间 文件、系统表空间 文件、撤销表空间 文件或数据目录。在移动文件或目录之前,请查看以下使用说明。
-
停止服务器。
-
将表空间文件或目录移动到所需位置。
-
使新的目录知晓
InnoDB
。-
如果移动单个 文件每表 或 通用表空间 文件,添加未知目录到
innodb_directories
值中。-
由
innodb_data_home_dir
、innodb_undo_directory
和datadir
变量定义的目录将自动追加到innodb_directories
参数值中,因此无需指定这些目录。 -
文件每表表空间文件只能移动到与模式同名的目录中。例如,如果
actor
表属于sakila
模式,那么actor.ibd
数据文件只能移动到名为sakila
的目录中。 -
通用表空间文件不能移动到数据目录或数据目录的子目录中。
-
-
如果移动系统表空间文件、撤销表空间文件或数据目录,更新
innodb_data_home_dir
、innodb_undo_directory
和datadir
设置,如有必要。
-
-
重新启动服务器。
使用说明
-
通配符表达式不能用于
innodb_directories
参数值中。 -
innodb_directories
扫描也会遍历指定目录的子目录。重复的目录和子目录将从要扫描的目录列表中删除。 -
innodb_directories
支持移动InnoDB
表空间文件。移动属于其他存储引擎的文件不受支持。这也适用于移动整个数据目录。 -
innodb_directories
支持重命名表空间文件时移动文件到扫描目录。它还支持将表空间文件移到其他支持的操作系统。 -
当将表空间文件移到不同操作系统时,请确保表空间文件名不包含禁止的字符或具有特殊意义的字符。
-
当从 Windows 操作系统移到 Linux 操作系统时,请修改二进制日志文件路径在二进制日志索引文件中,以使用反斜杠而不是正斜杠。默认情况下,二进制日志索引文件具有与二进制日志文件相同的基本名称,扩展名为'
.index
'。二进制日志索引文件的位置由--log-bin
定义。默认位置是数据目录。 -
如果将表空间文件移到不同操作系统引入跨平台复制,那么数据库管理员负责确保正确复制包含平台特定目录的 DDL 语句。允许指定目录的语句包括
CREATE TABLE ... DATA DIRECTORY
和CREATE TABLESPACE ... ADD DATAFILE
。 -
将文件每个表和通用表空间的目录添加到
innodb_directories
设置中。否则,InnoDB
无法在恢复期间定位文件。有关信息,请参阅崩溃恢复期间的表空间发现。要查看表空间文件位置,请查询信息模式
FILES
表:mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES \G