Plan the location in advance, because you cannot use the
DATA DIRECTORY clause with the
ALTER TABLE statement to change the
location later. The directory you specify could be on another
storage device with particular performance or capacity
characteristics, such as a fast
SSD or a high-capacity
Within the target directory, MySQL creates a subdirectory corresponding to the database name, and within that, a .ibd file for the new table.
The following example demonstrates creating a file-per-table
tablespace outside the MySQL data directory and shows the
.ibd file created in the specified directory.
mysql> USE test; Database changed mysql> SHOW VARIABLES LIKE 'innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/alternative/directory'; # MySQL creates a .ibd file for the new table in a subdirectory that corresponds # to the database name db_user@ubuntu:~/alternative/directory/test$ ls t1.ibd
For tablespace data files created outside of the MySQL data
directory to be found during recovery, the directory must be
InnoDB. To make a directory known,
add it to the
innodb_directories is a
read-only startup option. Configuring it requires restarting the
You can also use
CREATE TABLE ...
TABLESPACE in combination with the
DIRECTORY clause to create a file-per-table tablespace
outside the MySQL data directory. To do so, you must specify
innodb_file_per_table as the tablespace name.
mysql> CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE = innodb_file_per_table DATA DIRECTORY = '/alternative/directory';
You do not have to enable
innodb_file_per_table when using
MySQL initially holds the
.ibdfile open, preventing you from dismounting the device, but might eventually close the table if the server is busy. Be careful not to accidentally dismount an external device while MySQL is running, or start MySQL while the device is disconnected. Attempting to access a table when the associated
.ibdfile is missing causes a serious error that requires a server restart.
A server restart issues errors and warnings if the
.ibdfile is not at the expected path. In this case, you can restore the tablespace
.ibdfile from a backup or drop the table to remove the information about it from the data dictionary.
Before placing tables on an NFS-mounted volume, review potential issues outlined in Using NFS with MySQL.
If you use an LVM snapshot, file copy, or other file-based mechanism to back up the
.ibdfile, always use the
FLUSH TABLES ... FOR EXPORTstatement first to make sure that all changes buffered in memory are flushed to disk before the backup occurs.
DATA DIRECTORYclause is a supported alternative to using symbolic links, which is not supported for individual