InnoDB
在外部
创建表有不同的原因;也就是说,在数据目录之外创建表。例如,这些原因可能包括空间管理、I/O 优化或将表放置在具有特定性能或容量特征的存储设备上。
InnoDB支持以下几种外部建表方式:
您可以通过在语句中指定子句来在InnoDB外部目录
中创建表。
DATA DIRECTORYCREATE TABLE
CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/external/directory';DATA DIRECTORY在 file-per-table 表空间中创建的表支持
该子句。当变量启用时,表是在 file-per-table 表空间中隐式创建的
innodb_file_per_table,默认情况下是这样。
mysql> SELECT @@innodb_file_per_table;
+-------------------------+
| @@innodb_file_per_table |
+-------------------------+
| 1 |
+-------------------------+有关 file-per-table 表空间的更多信息,请参阅 第 14.6.3.2 节,“File-Per-Table 表空间”。
请确定您选择的目录位置,因为该
DATA DIRECTORY子句不能用于
ALTER TABLE稍后更改位置。
当您DATA DIRECTORY在语句中指定一个子句时
CREATE TABLE,表的数据文件()被创建在指定目录下的模式目录中,并且包含数据文件路径的table_name.ibd.isl文件()被创建在 MySQL 数据目录下的模式目录中。文件在
table_name.isl.isl功能上类似于符号链接。(实际的符号链接不支持用于
InnoDB数据文件。)
DATA DIRECTORY
以下示例演示了使用子句
在外部目录中创建表。假定该
innodb_file_per_table变量已启用。
mysql> USE test;
Database changed
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/external/directory';
# MySQL creates the table's data file in a schema directory
# under the external directory
$> cd /external/directory/test
$> ls
t1.ibd
# An .isl file that contains the data file path is created
# in the schema directory under the MySQL data directory
$> cd /path/to/mysql/data/test
$> ls
db.opt t1.frm t1.isl使用说明:
MySQL 最初将表空间数据文件保持打开状态,以防止您卸载设备,但如果服务器繁忙,最终可能会关闭该文件。注意不要在 MySQL 运行时意外卸载外部设备,或在设备断开连接时启动 MySQL。在关联的数据文件丢失时尝试访问表会导致严重错误,需要重新启动服务器。
如果在预期路径中找不到数据文件,服务器重启可能会失败。在这种情况下,手动
.isl从架构目录中删除该文件。重新启动后,删除表以 从数据字典.frm中删除文件和有关表的信息。在将表放在 NFS 挂载的卷上之前,请查看Using NFS with MySQL 中概述的潜在问题 。
如果使用 LVM 快照、文件复制或其他基于文件的机制来备份表的数据文件,请始终使用
FLUSH TABLES ... FOR EXPORT语句 first 以确保在备份发生之前缓冲在内存中的所有更改都 刷新到磁盘。使用
DATA DIRECTORY子句在外部目录中创建表是使用 不支持 的符号链接的 替代方法。InnoDBDATA DIRECTORY在源和副本位于同一主机上的复制环境中不支持 该子句。该DATA DIRECTORY子句需要完整的目录路径。在这种情况下复制路径会导致源和副本在同一位置创建表。
CREATE TABLE ...
TABLESPACE语法可以与
DATA DIRECTORY子句结合使用以在外部目录中创建表。为此,请指定
innodb_file_per_table为表空间名称。
mysql> CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE = innodb_file_per_table
DATA DIRECTORY = '/external/directory';
此方法仅支持在 file-per-table 表空间中创建的表,但不需要
innodb_file_per_table启用变量。在所有其他方面,此方法等同于上述CREATE TABLE ... DATA DIRECTORY方法。适用相同的使用说明。
您可以在驻留在外部目录中的通用表空间中创建表。
有关在外部目录中创建通用表空间的信息,请参阅 创建通用表空间。
有关在通用表空间中创建表的信息,请参阅 将表添加到通用表空间。