Spec-Zone.ru › MySQL 9.2

17.6.1.2 Создание таблиц вне каталога данных

Существуют различные причины для создания таблиц вне каталога данных; например, для управления объёмом памяти, оптимизации ввода-вывода или размещения таблиц на устройствах хранения с определёнными характеристиками производительности или ёмкости.

InnoDB поддерживает следующие методы создания таблиц вне каталога данных:

  • Использование предложения DATA DIRECTORY

  • Использование синтаксиса CREATE TABLE ... TABLESPACE

  • Создание таблицы во внешнем общем табличном пространстве

Использование предложения DATA DIRECTORY

Вы можете создать таблицу в внешнем каталоге, указав предложение DATA DIRECTORY в операторе CREATE TABLE.

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 в операторе CREATE TABLE, файл данных таблицы (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 может быть использован в сочетании с предложением DATA DIRECTORY для создания таблицы во внешнем каталоге. Для этого укажите 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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/innodb-create-table-external.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API