innodb_directories
变量定义了在启动时要扫描以查找表空间文件的目录,它支持在服务器离线时将表空间文件移动或恢复到新位置。在启动过程中,将使用发现的表空间文件,而不是数据字典中引用的文件,并更新数据字典以引用重新定位的文件。如果扫描发现重复的表空间文件,则启动失败,并显示一条错误消息,指示为同一个表空间 ID 找到了多个文件。
innodb_data_home_dir
、innodb_undo_directory
和 datadir
变量定义的目录会自动附加到 innodb_directories
参数值。无论是否显式指定了 innodb_directories
设置,都会在启动时扫描这些目录。隐式添加这些目录允许移动系统表空间文件、数据目录或撤消表空间文件,而无需配置 innodb_directories
设置。但是,当目录更改时,必须更新设置。例如,重新定位数据目录后,必须在重新启动服务器之前更新 --datadir
设置。
可以在启动命令或 MySQL 选项文件中指定 innodb_directories
变量。参数值周围使用引号,因为分号 (;) 在某些命令解释器中被解释为特殊字符。(例如,Unix shell 将其视为命令终止符。)
启动命令
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
以外存储引擎的文件。移动整个数据目录时,此限制也适用。将文件移动到扫描的目录时,
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