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.
Для экспорта таблиц с сервера экспорта используйте данную процедуру:
-
Обеспечьте согласованную копию, выполнив данное заявление для блокировки таблиц, чтобы они не могли быть изменены во время экспорта:
mysql>
FLUSH TABLES hr.employees, hr.managers WITH READ LOCK;Пока блокировка активна, таблицы по-прежнему могут использоваться, но только для чтения.
-
На уровне файловой системы скопируйте файлы
.sdiи данных таблиц из каталога схемыhrв каталог экспорта:Файл
.sdiнаходится в каталоге схемыhr, но может не иметь точно такого же имени файла, как имя таблицы. Например, файлы.sdiдля таблицemployeesиmanagersмогут называтьсяemployees_125.sdiиmanagers_238.sdi.Для таблицы
MyISAMфайлами данных являются её файл данных.MYDи индексный файл.MYI.
Учитывая эти имена файлов, команды копирования выглядят так:
$>
cd$>export_basedir/data/hrcp employees_125.sdi /tmp/export$>cp managers_238.sdi /tmp/export$>cp employees.{MYD,MYI} /tmp/export$>cp managers.{MYD,MYI} /tmp/export -
Разблокировать таблицы:
mysql>
UNLOCK TABLES;
Для импорта таблиц на сервер импорта используйте данную процедуру:
-
Схема импорта должна существовать. Если необходимо, выполните данное заявление для её создания:
mysql>
CREATE SCHEMA hr; -
На уровне файловой системы скопируйте файлы
.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/hrcp managers.{MYD,MYI}import_basedir/data/hr -
Импортируйте таблицы, выполнив оператор
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 не записывается в бинарный журнал.
Ограничения и пределы
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.