Spec-Zone.ru › MySQL 8.4

15.2.6 Заявление IMPORT TABLE

IMPORT TABLE FROM sdi_file [, sdi_file] ...

Оператор IMPORT TABLE импортирует MyISAM таблицы на основе информации, содержащейся в .sdi (сериализованные данные словаря) метаданных. IMPORT TABLE требует FILE разрешения для чтения файлов данных .sdi и таблиц, а также CREATE разрешения для создания таблицы.

Таблицы можно экспортировать с одного сервера с помощью mysqldump для записи файла SQL-команд и импортировать на другой сервер с помощью mysql для обработки файла дампа. IMPORT TABLE предоставляет более быстрый альтернативный способ, используя файлы таблиц “raw”.

Перед импортом файлы, содержащие данные таблицы, должны быть размещены в соответствующем каталоге схемы для сервера импорта, а файл .sdi должен быть расположен в каталоге, доступном для сервера. Например, файл .sdi можно разместить в каталоге, указанном переменной системы secure_file_priv, или (если secure_file_priv пустая) в каталоге внутри каталога данных сервера.

Следующий пример описывает, как экспортировать MyISAM таблицы с именами employees и managers из схемы hr одного сервера и импортировать их в схему hr другого сервера. В примере используются следующие предположения (чтобы выполнить аналогичную операцию на вашей системе, измените имена путей как необходимо):

  • Для сервера экспорта export_basedir представляет основной каталог, а каталог данных — export_basedir/data.

  • Для сервера импорта import_basedir представляет основной каталог, а каталог данных — import_basedir/data.

  • Файлы таблиц экспортируются с сервера экспорта в каталог /tmp/export, и этот каталог защищён (недоступен другим пользователям).

  • Сервер импорта использует /tmp/mysql-files как каталог, указанный переменной системы secure_file_priv.

Для экспорта таблиц с сервера экспорта используйте данную процедуру:

  1. Обеспечьте согласованную копию, выполнив данное заявление для блокировки таблиц, чтобы они не могли быть изменены во время экспорта:

    mysql> FLUSH TABLES hr.employees, hr.managers WITH READ LOCK;
    

    Пока блокировка активна, таблицы по-прежнему могут использоваться, но только для чтения.

  2. На уровне файловой системы скопируйте файлы .sdi и данных таблиц из каталога схемы hr в каталог экспорта:

    • Файл .sdi находится в каталоге схемы hr, но может не иметь точно такого же имени файла, как имя таблицы. Например, файлы .sdi для таблиц employees и managers могут называться employees_125.sdi и managers_238.sdi.

    • Для таблицы MyISAM файлами данных являются её файл данных .MYD и индексный файл .MYI.

    Учитывая эти имена файлов, команды копирования выглядят так:

    $> cd export_basedir/data/hr
    $> cp employees_125.sdi /tmp/export
    $> cp managers_238.sdi /tmp/export
    $> cp employees.{MYD,MYI} /tmp/export
    $> cp managers.{MYD,MYI} /tmp/export
    
  3. Разблокировать таблицы:

    mysql> UNLOCK TABLES;
    

Для импорта таблиц на сервер импорта используйте данную процедуру:

  1. Схема импорта должна существовать. Если необходимо, выполните данное заявление для её создания:

    mysql> CREATE SCHEMA hr;
    
  2. На уровне файловой системы скопируйте файлы .sdi в каталог сервера импорта, указанный в secure_file_priv, /tmp/mysql-files. Также скопируйте файлы данных таблиц в каталог схемы hr:

    $> cd /tmp/export
    $> cp employees_125.sdi /tmp/mysql-files
    $> cp managers_238.sdi /tmp/mysql-files
    $> cp employees.{MYD,MYI} import_basedir/data/hr
    $> cp managers.{MYD,MYI} import_basedir/data/hr
    
  3. Импортируйте таблицы, выполнив оператор IMPORT TABLE, указывающий на имена файлов .sdi:

    mysql> IMPORT TABLE FROM
           '/tmp/mysql-files/employees.sdi',
           '/tmp/mysql-files/managers.sdi';
    

Файл .sdi не обязательно размещать в каталоге сервера импорта, указанном переменной системы secure_file_priv, если эта переменная пустая; его можно разместить в любом каталоге, доступном для сервера, включая каталог схемы импортируемой таблицы. Если файл .sdi размещён в этом каталоге, он может быть перезаписан; операция импорта создаёт новый файл .sdi для таблицы, перезаписывая старый файл .sdi, если операция использует то же имя файла для нового файла.

Каждое значение sdi_file должно быть строковой литералом, указывающим на файл .sdi для таблицы, или шаблоном, который соответствует файлам .sdi. Если строка является шаблоном, любой ведущий путь каталога и суффикс имени файла .sdi должны быть указаны буквально. Символы шаблона допускаются только в части имени файла:

  • ? соответствует любому одиночному символу

  • * соответствует любой последовательности символов, включая отсутствие символов

Используя шаблон, предыдущее заявление IMPORT TABLE могло быть записано так (при условии, что каталог /tmp/mysql-files не содержит других файлов .sdi, соответствующих шаблону):

IMPORT TABLE FROM '/tmp/mysql-files/*.sdi';

Для интерпретации расположения путей файлов .sdi сервер использует те же правила для IMPORT TABLE, что и для правил серверной стороны для LOAD DATA (то есть, правила без LOCAL). См. Раздел 15.2.9, «Заявление LOAD DATA», уделяя особое внимание правилам интерпретации относительных путей.

IMPORT TABLE завершается ошибкой, если файлы .sdi или таблицы не могут быть найдены. После импорта таблицы сервер пытается открыть её и сообщает о любых проблемах в виде предупреждений. Для попытки ремонта, чтобы исправить любые обнаруженные проблемы, используйте REPAIR TABLE.

IMPORT TABLE не записывается в бинарный журнал.

END_OF_DOCUMENT_MARKER

Ограничения и пределы

IMPORT TABLE применяется только к не-TEMPORARY таблицам MyISAM. Он не применяется к таблицам, созданным с использованием транзакционного движка хранения, таблицам, созданным с помощью CREATE TEMPORARY TABLE, или представлениям.

Файл .sdi, используемый в операции импорта, должен быть сгенерирован на сервере с той же версией словаря данных и версией sdi, что и сервер импорта. Информация о версии генерирующего сервера находится в файле .sdi:

{
   "mysqld_version_id":80019,
   "dd_version":80017,
   "sdi_version":80016,
   ...
}

Чтобы определить версию словаря данных и sdi сервера импорта, вы можете проверить файл .sdi недавно созданной таблицы на сервере импорта.

Файлы данных и индексов таблицы должны быть помещены в директорию схемы сервера импорта до выполнения операции импорта, если только таблица, как она определена на сервере экспорта, не использует опции таблицы DATA DIRECTORY или INDEX DIRECTORY. В этом случае измените процедуру импорта, используя одну из этих альтернатив, прежде чем выполнять операцию IMPORT TABLE:

  • Поместите файлы данных и индексов в ту же директорию на хосте сервера импорта, что и на хосте сервера экспорта, и создайте символические ссылки в директории схемы сервера импорта на эти файлы.

  • Поместите файлы данных и индексов в директорию хоста сервера импорта, отличную от директории на хосте сервера экспорта, и создайте символические ссылки в директории схемы сервера импорта на эти файлы. Кроме того, измените файл .sdi, чтобы отразить различные расположения файлов.

  • Поместите файлы данных и индексов в директорию схемы на хосте сервера импорта и измените файл .sdi, чтобы удалить опции таблицы директорий данных и индексов.

Любые идентификаторы сортировки, хранящиеся в файле .sdi, должны ссылаться на те же сортировки на серверах экспорта и импорта.

Информация о триггерах для таблицы не сериализуется в файл таблицы .sdi, поэтому триггеры не восстанавливаются операцией импорта.

Некоторые изменения в файле .sdi допустимы перед выполнением оператором IMPORT TABLE, в то время как другие проблематичны или могут даже привести к сбою операции импорта:

  • Изменение опций таблицы директории данных и директории индексов необходимо, если расположения файлов данных и индексов отличаются между серверами экспорта и импорта.

  • Изменение имени схемы необходимо для импорта таблицы в другую схему на сервере импорта, чем на сервере экспорта.

  • Изменение имен схем и таблиц может потребоваться для компенсации различий между семантикой чувствительности к регистру файловой системы на серверах экспорта и импорта или различий в параметрах lower_case_table_names. Изменение имен таблиц в файле .sdi может потребовать переименования файлов таблиц.

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

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/import-table.html

Spec-Zone.ru

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