Loading...
MySQL 9.5 Reference Manual 9.5의 15.2.6 IMPORT TABLE Statement의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
1IMPORT TABLE FROM sdi_file [, sdi_file] ...
IMPORT TABLE statement는 .sdi(serialized dictionary information) 메타데이터 파일에 포함된 정보를 기반으로 MyISAM 테이블을 import합니다. IMPORT TABLE는 .sdi 및 테이블 콘텐츠 파일을 읽기 위한 FILE 권한과, 생성될 테이블에 대한 CREATE 권한이 필요합니다.
테이블은 한 서버에서 mysqldump를 사용해 SQL statement 파일로 export한 후, 다른 서버에서 mysql을 사용해 dump 파일을 처리함으로써 import할 수 있습니다.
IMPORT TABLE은 “raw” 테이블 파일을 사용하는 더 빠른 대안을 제공합니다.
Import 이전에, 테이블 콘텐츠를 제공하는 파일은 import 서버의 적절한 스키마 디렉터리에 배치되어야 하며, .sdi 파일은 서버에서 접근 가능한 디렉터리에 위치해야 합니다. 예를 들어, .sdi 파일은 secure_file_priv 시스템 변수에 의해 지정된 디렉터리에 둘 수 있으며, 또는 secure_file_priv가 비어 있는 경우 서버 데이터 디렉터리 하위의 디렉터리에 둘 수 있습니다.
다음 예시는 한 서버의 hr 스키마에 있는 employees 및 managers라는 이름의 MyISAM 테이블을 export하고, 다른 서버의 hr 스키마로 import하는 방법을 설명합니다. 예시는 다음과 같은 가정을 사용합니다 (자신의 시스템에서 유사한 작업을 수행하려면 경로 이름을 적절히 수정하십시오):
Export 서버의 경우, _export_basedir_는 base 디렉터리를 나타내며, 데이터 디렉터리는 export_basedir/data입니다.
Import 서버의 경우, _import_basedir_는 base 디렉터리를 나타내며, 데이터 디렉터리는 import_basedir/data입니다.
테이블 파일은 export 서버에서 /tmp/export 디렉터리로 export되며, 이 디렉터리는 안전합니다(다른 사용자가 접근할 수 없음).
Import 서버는 secure_file_priv 시스템 변수에 의해 지정된 디렉터리로 /tmp/mysql-files를 사용합니다.
Export 서버에서 테이블을 export하려면 다음 절차를 사용합니다:
1mysql> FLUSH TABLES hr.employees, hr.managers WITH READ LOCK;
Lock이 설정되어 있는 동안에도 테이블은 계속 사용할 수 있지만, 읽기 전용으로만 접근할 수 있습니다.
파일 시스템 수준에서, hr 스키마 디렉터리에서 secure export 디렉터리로 .sdi 및 테이블 콘텐츠 파일을 복사합니다:
.sdi 파일은 hr 스키마 디렉터리에 위치하지만, 테이블 이름과 정확히 같은 basename을 갖지 않을 수 있습니다. 예를 들어, employees 및 managers 테이블에 대한 .sdi 파일이 employees_125.sdi 및 managers_238.sdi라는 이름을 가질 수 있습니다.
MyISAM 테이블의 경우, 콘텐츠 파일은 .MYD 데이터 파일과 .MYI 인덱스 파일입니다.
이러한 파일 이름이 주어지면, copy 명령은 다음과 같습니다:
1$> cd export_basedir/data/hr 2$> cp employees_125.sdi /tmp/export 3$> cp managers_238.sdi /tmp/export 4$> cp employees.{MYD,MYI} /tmp/export 5$> cp managers.{MYD,MYI} /tmp/export
1mysql> UNLOCK TABLES;
Import 서버로 테이블을 import하려면 다음 절차를 사용합니다:
1mysql> CREATE SCHEMA hr;
.sdi 파일을 import 서버의 secure_file_priv 디렉터리인 /tmp/mysql-files로 복사합니다. 또한, 테이블 콘텐츠 파일을 hr 스키마 디렉터리로 복사합니다:1$> cd /tmp/export 2$> cp employees_125.sdi /tmp/mysql-files 3$> cp managers_238.sdi /tmp/mysql-files 4$> cp employees.{MYD,MYI} import_basedir/data/hr 5$> cp managers.{MYD,MYI} import_basedir/data/hr
.sdi 파일을 명시하는 IMPORT TABLE statement를 실행하여 테이블을 import합니다:1mysql> IMPORT TABLE FROM 2 '/tmp/mysql-files/employees.sdi', 3 '/tmp/mysql-files/managers.sdi';
.sdi 파일은, import 서버에서 secure_file_priv 시스템 변수에 의해 지정된 디렉터리에 둘 필요는 없으며, 해당 변수이 비어 있는 경우 서버에서 접근 가능한 어떤 디렉터리에나 둘 수 있습니다. 여기에는 import된 테이블의 스키마 디렉터리도 포함됩니다.
그러나 .sdi 파일이 그 디렉터리에 배치될 경우, 파일이 다시 쓰여질 수 있습니다. Import 작업은 테이블에 대한 새로운 .sdi 파일을 생성하며, 새 파일에 기존 파일과 동일한 이름을 사용하는 경우 기존 .sdi 파일을 덮어씁니다.
각 sdi_file 값은 테이블에 대한 .sdi 파일 이름이거나 .sdi 파일과 매칭되는 패턴인 문자열 리터럴이어야 합니다. 문자열이 패턴인 경우, 선행 디렉터리 경로와 .sdi 파일 이름 접미사는 리터럴로 지정해야 합니다. 패턴 문자는 파일 이름의 base name 부분에서만 허용됩니다:
?는 단일 문자 하나와 매칭됩니다.
*는 0개 이상의 문자로 이루어진 어떠한 시퀀스와도 매칭됩니다.
패턴을 사용하면, 앞의 IMPORT TABLE statement는 (/tmp/mysql-files 디렉터리에 패턴과 매칭되는 다른 .sdi 파일이 없다고 가정할 때) 다음과 같이 작성할 수 있습니다:
1IMPORT TABLE FROM '/tmp/mysql-files/*.sdi';
.sdi 파일 경로 이름의 위치를 해석하기 위해, 서버는 IMPORT TABLE에 대해 LOAD DATA의 서버 측 규칙(즉, LOCAL이 아닌 경우의 규칙)과 동일한 규칙을 사용합니다. Section 15.2.9, “LOAD DATA Statement”을 참조하고, 특히 상대 경로 이름을 해석하는 데 사용되는 규칙에 주의를 기울이십시오.
.sdi 또는 테이블 파일을 찾을 수 없는 경우 IMPORT TABLE은 실패합니다. 테이블을 import한 후, 서버는 테이블을 열려고 시도하고, 감지된 모든 문제를 경고로 보고합니다. 보고된 문제를 수정하기 위해 복구를 시도하려면, REPAIR TABLE을 사용하십시오.
IMPORT TABLE은 바이너리 로그에 기록되지 않습니다.
IMPORT TABLE은 non-TEMPORARY MyISAM 테이블에만 적용됩니다. 트랜잭션 스토리지 엔진으로 생성된 테이블, CREATE TEMPORARY TABLE로 생성된 테이블, 또는 view에는 적용되지 않습니다.
Import 작업에 사용되는 .sdi 파일은 import 서버와 동일한 데이터 딕셔너리 버전 및 sdi 버전을 가진 서버에서 생성되어야 합니다. 생성 서버의 버전 정보는 .sdi 파일에 있습니다:
1{ 2 "mysqld_version_id":80019, 3 "dd_version":80017, 4 "sdi_version":80016, 5 ... 6}
Import 서버의 데이터 딕셔너리 및 sdi 버전을 확인하려면, import 서버에서 최근에 생성한 테이블의 .sdi 파일을 확인하면 됩니다.
테이블 데이터 및 인덱스 파일은, export 서버에서 정의된 테이블이 DATA DIRECTORY 또는 INDEX DIRECTORY 테이블 옵션을 사용하지 않는 한, import 작업 이전에 import 서버의 스키마 디렉터리에 배치되어야 합니다. 해당 옵션을 사용하는 경우, IMPORT TABLE statement를 실행하기 전에 다음 대안 중 하나를 사용하도록 import 절차를 수정하십시오:
데이터 및 인덱스 파일을 export 서버 호스트에서와 동일한 디렉터리에 import 서버 호스트에서 배치하고, 그 파일에 대한 심볼릭 링크를 import 서버 스키마 디렉터리에 생성합니다.
데이터 및 인덱스 파일을 export 서버 호스트의 디렉터리와 다른 import 서버 호스트의 디렉터리에 배치하고, 그 파일에 대한 심볼릭 링크를 import 서버 스키마 디렉터리에 생성합니다. 추가로, .sdi 파일을 수정하여 서로 다른 파일 위치를 반영합니다.
데이터 및 인덱스 파일을 import 서버 호스트의 스키마 디렉터리에 배치하고, .sdi 파일을 수정하여 data 및 index 디렉터리 테이블 옵션을 제거합니다.
.sdi 파일에 저장된 모든 정렬 ID는 export 서버와 import 서버에서 동일한 정렬을 가리켜야 합니다.
테이블에 대한 트리거 정보는 테이블 .sdi 파일에 직렬화되지 않으므로, 트리거는 import 작업에 의해 복원되지 않습니다.
IMPORT TABLE statement를 실행하기 전에 .sdi 파일에 대해 허용되는 편집도 있지만, 문제가 되거나 심지어 import 작업을 실패하게 할 수 있는 편집도 있습니다:
Export 서버와 import 서버 사이에서 데이터 및 인덱스 파일의 위치가 다른 경우, data 디렉터리 및 index 디렉터리 테이블 옵션을 변경하는 것은 필수입니다.
Import 서버에서 export 서버와 다른 스키마로 테이블을 import하려면 스키마 이름을 변경해야 합니다.
Export 서버와 import 서버 간의 파일 시스템 대소문자 구분 동작 차이 또는 lower_case_table_names 설정의 차이를 수용하기 위해 스키마 및 테이블 이름을 변경해야 할 수도 있습니다. .sdi 파일에서 테이블 이름을 변경하는 경우, 테이블 파일의 이름도 변경해야 할 수 있습니다.
일부 경우 컬럼 정의에 대한 변경이 허용됩니다. 데이터 타입 변경은 문제가 발생할 가능성이 높습니다.
15.2.5 HANDLER Statement
15.2.7 INSERT Statement