Spec-Zone.ru › MySQL 5.7

14.6.1.2 Создание таблиц в внешнем хранилище

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

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

  • Использование DATA DIRECTORY

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

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

Использование DATA DIRECTORY

Вы можете создать таблицу InnoDB во внешнем каталоге, указав клаузу 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 |
+-------------------------+

Дополнительную информацию о табличных пространствах с файлом на таблицу см. в разделе 14.6.3.2 «Табличные пространства с файлом на таблицу».

Убедитесь в правильности выбранного расположения каталога, так как клаузу DATA DIRECTORY нельзя использовать с ALTER TABLE для изменения расположения впоследствии.

При указании клаузы DATA DIRECTORY в операторе CREATE TABLE, файл данных таблицы (table_name.ibd) создаётся в каталоге схемы по указанному адресу, и файл .isl (table_name.isl), содержащий путь к файлу данных, создаётся в каталоге схемы в каталоге данных MySQL. Файл .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, ознакомьтесь с возможными проблемами, изложенными в разделе «Использование NFS с MySQL».

  • Если используется моментальное копирование LVM, копирование файла или другой механизм на основе файлов для резервного копирования файла данных таблицы, всегда используйте оператор FLUSH TABLES ... FOR EXPORT, чтобы убедиться, что все изменения, буферизованные в памяти, записаны на диск перед выполнением резервного копирования.

  • Использование клаузы DATA DIRECTORY для создания таблицы во внешнем каталоге является альтернативой использованию символических ссылок, которые InnoDB не поддерживает.

  • Клауза DATA DIRECTORY не поддерживается в среде репликации, где источник и реплика находятся на одном узле. Клауза DATA DIRECTORY требует полного пути к каталогу. Репликация пути в этом случае приведет к тому, что источник и реплика создадут таблицу в том же месте.

Использование синтаксиса 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-5.7-en/innodb-create-table-external.html

Spec-Zone.ru

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