在MySQL中,每个InnoDB或者MyISAM表都会对应生成数据文件和索引文件,默认情况下这些文件会存放在数据库对应的数据目录下。当我们需要调整文件的存储位置时,可以通过DATA DIRECTORY和INDEX DIRECTORY参数来实现,这两个参数分别用于指定表的数据文件和索引文件的存储路径。

使用前提条件
并不是所有场景都可以使用这两个参数,需要满足以下基本要求:
- MySQL版本需要支持该特性,MyISAM引擎从较早版本就支持,InnoDB引擎在MySQL 5.6及以上版本才支持该参数
- 指定的存储路径必须是已经存在的目录,且MySQL运行用户对该目录有读写权限
- 路径需要是绝对路径,不能使用相对路径
- 对于InnoDB引擎,还需要开启
innodb_file_per_table参数,否则表数据会存储在共享表空间,无法单独指定路径
MyISAM表的使用示例
MyISAM引擎的表使用这两个参数比较简单,创建表时直接指定即可,以下是示例代码:
-- 创建MyISAM表,指定数据文件存到/data/mysql_data,索引文件存到/data/mysql_index
CREATE TABLE test_myisam (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
) ENGINE=MyISAM
DATA DIRECTORY='/data/mysql_data'
INDEX DIRECTORY='/data/mysql_index';执行上述语句后,在/data/mysql_data目录下会生成test_myisam.MYD数据文件,在/data/mysql_index目录下会生成test_myisam.MYI索引文件,而表的结构文件test_myisam.frm还是会存放在默认的数据库目录下。
InnoDB表的使用示例
InnoDB表使用这两个参数需要先确认innodb_file_per_table参数已经开启,查看该参数的语句如下:
-- 查看innodb_file_per_table参数状态 SHOW VARIABLES LIKE 'innodb_file_per_table';
如果值是ON,就可以创建表并指定路径,示例代码如下:
-- 创建InnoDB表,指定数据文件和索引文件的存储路径
CREATE TABLE test_innodb (
id INT PRIMARY KEY AUTO_INCREMENT,
content TEXT
) ENGINE=InnoDB
DATA DIRECTORY='/data/mysql_innodb_data'
INDEX DIRECTORY='/data/mysql_innodb_index';需要注意的是,InnoDB表的数据和索引通常存储在同一个.ibd文件中,所以指定路径后,.ibd文件会生成在DATA DIRECTORY指定的目录下,INDEX DIRECTORY参数在InnoDB下可能不会单独生效,具体取决于MySQL的版本和配置。
注意事项和常见问题
使用这两个参数时,还需要注意以下问题:
- 指定的路径不能是MySQL的数据目录本身,否则会导致文件冲突
- 如果后续移动了指定的存储目录,或者修改了目录权限,会导致表无法正常访问,需要恢复路径和权限才能正常使用
- 使用mysqldump备份表时,这两个参数的配置不会被备份,恢复时需要手动重新指定路径
- 部分操作系统对符号链接有限制,MySQL可能会通过符号链接的方式关联文件,需要确保系统支持符号链接功能
参数查询和验证
创建表之后,可以通过查看表的状态来确认参数是否生效,示例语句如下:
-- 查看表的状态,包含DATA DIRECTORY和INDEX DIRECTORY信息 SHOW TABLE STATUS LIKE 'test_myisam'\G
在输出的结果中,可以看到Data_directory和Index_directory字段的值,就是之前指定的路径,说明配置已经生效。
MySQLDATA_DIRECTORYINDEX_DIRECTORY数据文件存储索引文件存储修改时间:2026-06-04 01:32:44