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.