17.6.1.2 Создание таблиц вне каталога данных
Существуют различные причины для создания таблиц вне каталога данных; это может включать управление пространством, оптимизацию ввода-вывода или размещение таблиц на устройстве хранения с особыми характеристиками производительности или ёмкости, например.
InnoDB поддерживает следующие методы создания таблиц вне каталога данных:
Использование предложения DATA DIRECTORY
Вы можете создать таблицу в внешнем каталоге, указав предложение DATA DIRECTORY в операторе создания таблицы.
CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/external/directory';Предложение DATA DIRECTORY поддерживается для таблиц, созданных в табличных пространствах с файлом на таблицу. Таблицы неявно создаются в табличных пространствах с файлом на таблицу, когда переменная innodb_file_per_table включена, что по умолчанию так и есть.
mysql> SELECT @@innodb_file_per_table;
+-------------------------+
| @@innodb_file_per_table |
+-------------------------+
| 1 |
+-------------------------+
Дополнительную информацию о табличных пространствах с файлом на таблицу см. в разделе 17.6.3.2 «Табличные пространства с файлом на таблицу».
При указании предложения DATA DIRECTORY в операторе создания таблицы, файл данных таблицы () создаётся в каталоге схемы в указанном каталоге.table_name.ibd
Таблицы и разбиения таблиц, созданные вне каталога данных с помощью предложения DATA DIRECTORY, ограничены каталогами, известными InnoDB. Это ограничение позволяет администраторам баз данных контролировать место создания файлов данных табличного пространства и гарантирует, что файлы данных можно найти во время восстановления (см. Обнаружение табличного пространства во время восстановления после сбоя). Известными каталогами являются те, которые определяются переменными datadir, innodb_data_home_dir и innodb_directories. Следующий оператор позволяет проверить эти настройки:
mysql> SELECT @@datadir,@@innodb_data_home_dir,@@innodb_directories;
Если нужный каталог неизвестен, добавьте его в настройку innodb_directories до создания таблицы. Переменная innodb_directories является только для чтения. Для её настройки требуется перезапуск сервера. Дополнительную информацию о настройке системных переменных см. в разделе 7.1.9 «Использование системных переменных».
Следующий пример демонстрирует создание таблицы в внешнем каталоге с помощью предложения DATA DIRECTORY. Предполагается, что переменная innodb_file_per_table включена и что каталог известен InnoDB.
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
Примечания по использованию:
-
MySQL первоначально держит файл данных табличного пространства открытым, предотвращая отключение устройства, но в конечном итоге может закрыть файл, если сервер занят. Будьте осторожны, чтобы случайно не отключить внешнее устройство во время работы MySQL или не запускать MySQL, когда устройство отключено. Попытка доступа к таблице, когда соответствующий файл данных отсутствует, вызывает серьёзную ошибку, требующую перезагрузки сервера.
Перезапуск сервера может завершиться неудачно, если файл данных не найден по ожидаемому пути. В этом случае можно восстановить файл данных табличного пространства из резервной копии или удалить таблицу, чтобы удалить информацию о ней из БД.
Перед размещением таблицы на объёме, смонтированном через NFS, ознакомьтесь с возможными проблемами, описанными в разделе «Использование NFS с MySQL».
При использовании моментального снимка LVM, копирования файла или другого механизма на основе файлов для резервного копирования файла данных таблицы, всегда сначала используйте оператор
FLUSH TABLES ... FOR EXPORTдля того, чтобы убедиться, что все изменения, буферизованные в памяти, записаны на диск перед созданием резервной копии.Использование предложения DATA DIRECTORY для создания таблицы в внешнем каталоге — это альтернатива использованию символических ссылок, которых
InnoDBне поддерживает.Предложение DATA DIRECTORY не поддерживается в среде репликации, где источник и реплика находятся на одном хосте. Предложение DATA DIRECTORY требует полного пути к каталогу. Репликация пути в этом случае приведет к созданию таблицы источником и репликой в одном и том же месте.
Таблицы, созданные в табличных пространствах с файлом на таблицу, не могут быть созданы в каталоге табличного пространства отката (
innodb_undo_directory), если этот каталог не известенInnoDB. Известными каталогами являются те, которые определяются переменнымиdatadir,innodb_data_home_dirиinnodb_directories.
Использование синтаксиса CREATE TABLE ... TABLESPACE
Синтаксис оператора CREATE TABLE ...
TABLESPACE может быть использован в сочетании с предложением TABLESPACE для создания таблицы в внешнем каталоге. Для этого укажите innodb_file_per_table в качестве имени табличного пространства.
mysql> CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE = innodb_file_per_table
DATA DIRECTORY = '/external/directory';
Этот метод поддерживается только для таблиц, созданных в табличных пространствах с файлом на таблицу, но не требует включения переменной innodb_file_per_table. Во всех остальных отношениях этот метод эквивалентен методу CREATE TABLE ... DATA DIRECTORY, описанному выше. Применимы те же замечания по использованию.
Создание таблицы во внешнем общем табличном пространстве
Вы можете создать таблицу в общем табличном пространстве, расположенном во внешнем каталоге.
Дополнительную информацию о создании общего табличного пространства во внешнем каталоге см. в разделе «Создание общего табличного пространства».
Дополнительную информацию о создании таблицы в общем табличном пространстве см. в разделе «Добавление таблиц в общее табличное пространство».
© 2025 Oracle
Licensed under the GPLv2 License.