Spec-Zone .ru
спецификации, руководства, описания, API

5.4.1.2. Определение Расположения Табличной области

Создать новое InnoDB таблица в определенном расположении вне каталога данных MySQL, используйте DATA DIRECTORY = absolute_path_to_directory пункт CREATE TABLE оператор. (Запланируйте расположение заранее, потому что невозможно использовать этот пункт с ALTER TABLE оператор.) Каталог, который Вы определяете, мог быть на другом устройстве хранения с определенной производительностью или характеристиками емкости, такими как быстрый SSD или HDD большой емкости.

В пределах целевого каталога MySQL создает подкаталог, соответствующий имени базы данных, и в пределах этого.ibd файл для новой таблицы. В каталоге базы данных под MySQL DATADIR каталог, MySQL создает a table_name.isl файл, содержащий путь для таблицы..isl файл обрабатывается MySQL как символьная ссылка. (Используя фактические символьные ссылки никогда не поддерживался для InnoDB таблицы.)

Следующий пример показывает, как Вы могли бы выполнить маленькую разработку или протестировать экземпляр MySQL на ноутбуке с основным жестким диском, который на 95 % полон, и поместите новую таблицу EXTERNAL на различном устройстве хранения с большим свободным пространством. Команды оболочки показывают различные пути к LOCAL таблица в ее расположении значения по умолчанию под DATADIR каталог, и EXTERNAL таблица в расположении Вы определили:

mysql> \! df -k .Filesystem   1024-blocks      Used Available Capacity  iused   ifree %iused  Mounted on/dev/disk0s2   244277768 231603532  12418236    95% 57964881 3104559   95%   /mysql> use test;Database changedmysql> show variables like 'innodb_file_per_table';+-----------------------+-------+| Variable_name         | Value |+-----------------------+-------+| innodb_file_per_table | ON    |+-----------------------+-------+1 row in set (0.00 sec)mysql> \! pwd/usr/local/mysqlmysql> create table local (x int unsigned not null primary key);Query OK, 0 rows affected (0.03 sec)mysql> \! ls -l data/test/local.ibd-rw-rw----  1 cirrus  staff  98304 Nov 13 15:24 data/test/local.ibdmysql> create table external (x int unsigned not null primary key) data directory = '/volumes/external1/data';Query OK, 0 rows affected (0.03 sec)mysql> \! ls -l /volumes/external1/data/test/external.ibd-rwxrwxrwx  1 cirrus  staff  98304 Nov 13 15:34 /volumes/external1/data/test/external.ibdmysql> select count(*) from local;+----------+| count(*) |+----------+|        0 |+----------+1 row in set (0.01 sec)mysql> select count(*) from external;+----------+| count(*) |+----------+|        0 |+----------+1 row in set (0.01 sec)
Примечания:
  • MySQL первоначально содержит .ibd открытый файл, препятствуя тому Вам демонтировать устройство, но мог бы в конечном счете закрыть таблицу, если сервер занят. Бойтесь случайно демонтировать внешнее устройство, в то время как MySQL работает, или запустить MySQL, в то время как устройство разъединяется. Попытка получить доступ к таблице, когда связанное .ibd файл пропускает причины серьезная ошибка, которая требует перезапуска сервера.

    Перезапуск сервера мог бы перестать работать если .ibd файл все еще не в ожидаемом пути. В этом случае вручную удалите table_name.isl файл в каталоге базы данных, и после перезапуска делает a DROP TABLE удалить .frm файл и удаляет информацию о таблице из словаря данных.

  • Не помещайте таблицы MySQL в смонтированный NFS объем. NFS использует протокол передачи сообщений, чтобы записать в файлы, которые могли вызвать противоречивость данных, если сетевые сообщения теряются или получаются не в порядке.

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

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