Spec-Zone.ru › MySQL 9.2

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-9.2-en/import-table.html

Spec-Zone.ru

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