Loading...
MySQL 9.5 Reference Manual 9.5의 25.5.23 ndb_restore — Restore an NDB Cluster Backup의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
NDB Cluster 복원 프로그램은 별도의 명령줄 유틸리티인 ndb_restore로 구현되며, 보통 MySQL bin 디렉터리에서 찾을 수 있습니다. 이 프로그램은 백업 결과로 생성된 파일들을 읽고, 저장된 정보를 데이터베이스에 삽입합니다.
ndb_restore는 백업을 생성할 때 사용한 START BACKUP 명령에 의해 생성된 각 백업 파일마다 한 번씩 실행해야 합니다(자세한 내용은 Section 25.6.8.2, “Using The NDB Cluster Management Client to Create a Backup” 참고). 이는 백업이 생성된 당시 클러스터의 데이터 노드 개수와 같습니다.
참고
ndb_restore를 사용하기 전에, 여러 데이터 노드를 병렬로 복구하는 경우가 아니라면, 클러스터를 단일 사용자 모드로 실행하는 것이 좋습니다. 자세한 정보는 Section 25.6.6, “NDB Cluster Single User Mode”를 참고하십시오.
ndb_restore와 함께 사용할 수 있는 옵션들은 다음 표에 나와 있습니다. 표 뒤에 추가 설명이 이어집니다.
| Property | Value |
|---|---|
| Command-Line Format | `--allow-pk-changes[=0 |
| Type | Integer |
| Default Value | 0 |
| Minimum Value | 0 |
| Maximum Value | 1 |
이 옵션을 1로 설정하면, ndb_restore는 테이블 정의의 기본 키가 백업에 있는 동일 테이블의 기본 키와 달라도 허용합니다. 이는 기본 키가 하나 이상의 테이블에서 변경된 서로 다른 스키마 버전 간에 백업과 복구를 수행할 때, 많은 ALTER TABLE 문을 테이블 스키마와 데이터 복구 후에 실행하는 것보다, ndb_restore를 사용하여 복구 작업을 수행하는 것이 더 간단하거나 효율적으로 보일 때 유용할 수 있습니다.
--allow-pk-changes로 지원되는 기본 키 정의 변경은 다음과 같습니다:
기본 키 확장: 백업의 테이블 스키마에 존재하는 non-nullable 칼럼이 데이터베이스에서 테이블의 기본 키의 일부가 됩니다.
Important
테이블의 기본 키를 확장할 때, 기본 키의 일부가 되는 모든 칼럼은 백업이 진행되는 동안 업데이트되어서는 안 됩니다. 이러한 칼럼에 대해 발견되는 모든 업데이트는 값이 실제로 변경되지 않은 경우에도, ndb_restore에 의해 복구 작업 실패를 유발합니다. 일부 경우에는 --ignore-extended-pk-updates 옵션을 사용하여 이 동작을 무시할 수 있습니다. 자세한 정보는 해당 옵션 설명을 참고하십시오.
기본 키 축소 (1): 백업 스키마에서 이미 테이블의 기본 키의 일부인 칼럼이 더 이상 기본 키의 일부가 아니지만, 테이블에는 남아 있습니다.
기본 키 축소 (2): 백업 스키마에서 이미 테이블의 기본 키의 일부인 칼럼이 테이블에서 완전히 제거됩니다.
이러한 차이점은 BLOB 및 TEXT 칼럼 변경(이 경우 스테이징 테이블 사용이 필요함)과 같이 ndb_restore에서 지원되는 다른 스키마 차이와 함께 조합할 수 있습니다.
기본 키 스키마 변경을 사용하는 일반적인 시나리오의 기본 단계는 다음과 같습니다:
ndb_restore --restore-meta를 사용하여 테이블 스키마 복구
스키마를 원하는 상태로 변경하거나 새로 생성
원하는 스키마를 백업
이전 단계에서 만든 백업을 사용하여, 인덱스와 제약 조건을 드롭하기 위해 ndb_restore --disable-indexes 실행
모든 데이터를 복구하기 위해, (필요 시 --ignore-extended-pk-updates, --disable-indexes 및 기타 필요한 옵션과 함께) ndb_restore --allow-pk-changes 실행
원하는 스키마로 만들어진 백업을 사용하여 인덱스와 제약 조건을 재구축하기 위해 ndb_restore --rebuild-indexes 실행
기본 키를 확장할 때, 복구 작업 동안 ndb_restore가 기존 기본 키에서 새 기본 키로 매핑하기 위해 임시 세컨더리 유니크 인덱스를 사용해야 할 수 있습니다. 이러한 인덱스는 백업 로그의 이벤트를 확장된 기본 키가 있는 테이블에 적용하는 데 필요할 때만 생성됩니다. 이 인덱스의 이름은 NDB$RESTORE_PK_MAPPING이며, 필요로 하는 각 테이블에 생성됩니다. 이 인덱스는 동시에 실행 중인 여러 ndb_restore 인스턴스에서 공유될 수 있습니다(복구 과정 마지막에 ndb_restore --rebuild-indexes를 실행하면 이 인덱스는 드롭됩니다).
| Property | Value |
|---|---|
| Command-Line Format | --append |
--tab 및 --print-data 옵션과 함께 사용할 때, 동일한 이름을 가진 기존 파일에 데이터를 추가(append)합니다.
--backup-path = dir_name| Property | Value |
|---|---|
| Command-Line Format | --backup-path=path |
| Type | Directory name |
| Default Value | ./ |
백업 디렉터리의 경로가 필요하며, 이는 --backup-path 옵션을 사용해 ndb_restore에 제공됩니다. 이 경로는 복구할 백업의 ID 백업에 해당하는 서브디렉터리를 포함해야 합니다. 예를 들어, 데이터 노드의 DataDir가 /var/lib/mysql-cluster라면, 백업 디렉터리는 /var/lib/mysql-cluster/BACKUP이고, ID 3인 백업의 백업 파일은 /var/lib/mysql-cluster/BACKUP/BACKUP-3에 있습니다. 경로는 ndb_restore 실행 파일이 위치한 디렉터리에 대해 절대 또는 상대 경로일 수 있으며, 선택적으로 backup-path= 프리픽스를 사용할 수 있습니다.
백업을 생성한 데이터베이스와 다른 구성의 데이터베이스에 백업을 복구하는 것도 가능합니다. 예를 들어, 두 개의 스토리지 노드(노드 ID 2와 3)가 있는 클러스터에서 생성된 백업 ID 12를, 네 개의 노드가 있는 클러스터에 복구하려고 한다고 가정해 봅니다. 이때는 백업이 수행된 클러스터의 각 스토리지 노드에 대해 한 번씩, 즉 두 번 ndb_restore를 실행해야 합니다. 그러나, ndb_restore가 항상 한 MySQL 버전에서 실행 중인 클러스터에서 생성된 백업을 다른 MySQL 버전을 실행하는 클러스터로 복구할 수 있는 것은 아닙니다. 자세한 내용은 Section 25.3.7, “Upgrading and Downgrading NDB Cluster”를 참고하십시오.
주의
새로운 버전의 NDB Cluster에서 생성된 백업을, 오래된 버전의 ndb_restore로 복구하는 것은 불가능합니다. 더 새로운 MySQL 버전에서 생성한 백업을 오래된 클러스터에 복구하는 것은 가능하지만, 이때는 복구 작업에 더 새로운 NDB Cluster 버전에서 제공하는 ndb_restore를 사용해야 합니다.
예를 들어, NDB Cluster 8.4.7에서 실행 중인 클러스터로부터 취한 백업을, NDB Cluster 8.0.44를 실행 중인 클러스터로 복구하려면, NDB Cluster 8.0.44 배포판에 포함된 ndb_restore를 사용해야 합니다.
보다 빠른 복구를 위해, 충분한 수의 클러스터 연결이 가능하다면 데이터를 병렬로 복구할 수 있습니다. 즉, 여러 노드로 병렬 복구를 수행할 때, 각 동시 ndb_restore 프로세스마다 클러스터 config.ini 파일에 [api] 또는 [mysqld] 섹션이 하나씩 있어야 합니다. 그러나 데이터 파일은 반드시 로그보다 먼저 적용되어야 합니다.
| Property | Value |
|---|---|
| Command-Line Format | --backup-password=password |
| Type | String |
| Default Value | [none] |
이 옵션은 --decrypt 옵션으로 암호화된 백업을 해독할 때 사용할 패스워드를 지정합니다. 이는 백업을 암호화할 때 사용한 패스워드와 동일해야 합니다.
패스워드는 길이가 1에서 256자 사이여야 하며, 작은따옴표 또는 큰따옴표로 감싸야 합니다. 패스워드에는 ASCII 문자 코드 32, 35, 38, 40-91, 93, 95, 97-126에 해당하는 문자들을 사용할 수 있습니다. 즉, !, ', ", $, %, \, ^를 제외한 모든 출력 가능한 ASCII 문자를 사용할 수 있습니다.
패스워드를 생략하는 것도 가능하며, 이 경우 ndb_restore는 --backup-password-from-stdin을 사용할 때와 마찬가지로, stdin에서 패스워드가 입력되기를 기다립니다.
| Property | Value |
|---|---|
| Command-Line Format | --backup-password-from-stdin |
--backup-password를 대신 사용할 때, 이 옵션을 사용하면 시스템 셸(stdin)에서 백업 패스워드를 입력받을 수 있습니다. 이는 --password를 명령줄에서 직접 패스워드 없이 사용할 때 mysql에 패스워드를 대화형으로 제공하는 방식과 유사합니다.
--backupid = #, -b| Property | Value |
|---|---|
| Command-Line Format | --backupid=# |
| Type | Numeric |
| Default Value | none |
이 옵션은 필수이며, 백업의 ID 또는 시퀀스 번호를 지정하는 데 사용됩니다. 이는 백업 완료 시 매니지먼트 클라이언트가 출력하는 Backup backup_id completed 메시지에 표시되는 숫자와 동일합니다(자세한 내용은 Section 25.6.8.2, “Using The NDB Cluster Management Client to Create a Backup” 참고).
주의
클러스터 백업을 복구할 때는, 반드시 동일한 백업 ID를 가진 백업에서 모든 데이터 노드를 복구해야 합니다. 서로 다른 백업에서 생성된 파일을 사용하는 경우, 최선의 경우에도 클러스터를 일관성 없는 상태로 복구하게 되며, 일반적으로는 복구가 완전히 실패합니다.
| Property | Value |
|---|---|
| Command-Line Format | --character-sets-dir=path |
캐릭터 세트가 포함된 디렉터리입니다.
--connect, -c| Property | Value |
|---|---|
| Command-Line Format | --connect=connection_string |
| Type | String |
| Default Value | localhost:1186 |
--ndb-connectstring의 별칭입니다.
| Property | Value |
|---|---|
| Command-Line Format | --connect-retries=# |
| Type | Integer |
| Default Value | 12 |
| Minimum Value | 0 |
| Maximum Value | 12 |
포기하기 전에 연결을 다시 시도하는 횟수입니다.
| Property | Value |
|---|---|
| Command-Line Format | --connect-retry-delay=# |
| Type | Integer |
| Default Value | 5 |
| Minimum Value | 0 |
| Maximum Value | 5 |
매니지먼트 서버에 접속을 시도하는 각 시도 사이에 대기하는 초 단위 시간입니다.
| Property | Value |
|---|---|
| Command-Line Format | --connect-string=connection_string |
| Type | String |
| Default Value | [none] |
--ndb-connectstring과 동일합니다.
| Property | Value |
|---|---|
| Command-Line Format | --core-file |
에러 발생 시 코어 파일을 작성합니다. 디버깅에 사용됩니다.
| Property | Value |
|---|---|
| Command-Line Format | --decrypt |
--backup-password 옵션으로 제공된 패스워드를 사용하여 암호화된 백업을 복호화합니다.
| Property | Value |
|---|---|
| Command-Line Format | --defaults-extra-file=path |
| Type | String |
| Default Value | [none] |
글로벌 파일을 모두 읽은 후에 주어진 파일을 읽습니다.
| Property | Value |
|---|---|
| Command-Line Format | --defaults-file=path |
| Type | String |
| Default Value | [none] |
지정된 파일에서만 기본 옵션을 읽습니다.
| Property | Value |
|---|---|
| Command-Line Format | --defaults-group-suffix=string |
| Type | String |
| Default Value | [none] |
concat(group, suffix) 형식의 그룹도 읽습니다.
| Property | Value |
|---|---|
| Command-Line Format | --disable-indexes |
네이티브 NDB 백업에서 데이터를 복구하는 동안 인덱스 복구를 비활성화합니다. 이후 --rebuild-indexes를 사용하여 모든 테이블에 대해 멀티스레드 인덱스 빌드를 수행할 수 있으며, 이는 매우 큰 테이블에 대해 인덱스를 동시에 재구축하는 것보다 더 빠를 수 있습니다.
이 옵션은 또한 백업에 지정된 모든 외래 키를 드롭합니다.
MySQL은 하나 이상의 인덱스를 찾을 수 없는 NDB 테이블도, 해당 인덱스를 사용하지 않는 쿼리의 경우에는 열 수 있습니다. 그렇지 않으면 쿼리는 ER_NOT_KEYFILE 에러와 함께 거부됩니다. 후자의 경우, 다음과 같은 ALTER TABLE 문을 실행하여 임시로 이 문제를 우회할 수 있습니다:
1ALTER TABLE tbl ALTER INDEX idx INVISIBLE;
이는 MySQL이 테이블 tbl의 인덱스 idx를 무시하게 합니다. 자세한 내용은 Primary Keys and Indexes 및 Section 10.3.12, “Invisible Indexes”를 참고하십시오.
| Property | Value |
|---|---|
| Command-Line Format | --dont-ignore-systab-0 |
일반적으로, 테이블 데이터와 메타데이터를 복구할 때, ndb_restore는 백업에 존재하는 NDB 시스템 테이블 사본을 무시합니다. --dont-ignore-systab-0는 이 시스템 테이블이 복구되도록 합니다. 이 옵션은 실험 및 개발 용도로만 의도되었으며, 운영 환경에서는 사용을 권장하지 않습니다.
--exclude-databases = db-list| Property | Value |
|---|---|
| Command-Line Format | --exclude-databases=list |
| Type | String |
| Default Value | `` |
복구되지 않아야 할 하나 이상의 데이터베이스를 쉼표로 구분한 목록입니다.
이 옵션은 자주 --exclude-tables와 함께 사용됩니다. 자세한 내용과 예는 해당 옵션 설명을 참고하십시오.
--exclude-intermediate-sql-tables[ = TRUE|FALSE]| Property | Value |
|---|---|
| Command-Line Format | `--exclude-intermediate-sql-tables[=TRUE |
| Type | Boolean |
| Default Value | TRUE |
copying ALTER TABLE 작업을 수행할 때, mysqld는 이름이 #sql- 프리픽스를 갖는 중간 테이블을 생성합니다. TRUE일 때, --exclude-intermediate-sql-tables 옵션은 이러한 작업에서 남겨졌을 수 있는 테이블을 ndb_restore가 복구하지 않도록 합니다. 이 옵션의 기본값은 TRUE입니다.
| Property | Value |
|---|---|
| Command-Line Format | --exclude-missing-columns |
이 옵션을 사용하면 선택된 테이블 칼럼만 복구할 수 있습니다. 이 옵션을 사용하면, 백업에 있는 해당 테이블 버전과 비교했을 때, 복구되는 테이블에서 누락된 칼럼을 ndb_restore가 무시하도록 합니다. 이 옵션은 복구되는 모든 테이블에 적용됩니다. 이 옵션을 선택된 테이블이나 데이터베이스에만 적용하고 싶다면, 이 섹션의 다른 곳에 설명된 하나 이상의 --include-* 또는 --exclude-* 옵션과 조합하여 사용한 다음, 나머지 테이블에는 보완적인 세트의 옵션을 사용해 데이터를 복구할 수 있습니다.
| Property | Value |
|---|---|
| Command-Line Format | --exclude-missing-tables |
이 옵션을 사용하면 선택된 테이블만 복구할 수 있습니다. 이 옵션으로 인해, 대상 데이터베이스에 존재하지 않는 백업의 테이블은 ndb_restore가 무시합니다.
--exclude-tables = table-list| Property | Value |
|---|---|
| Command-Line Format | --exclude-tables=list |
| Type | String |
| Default Value | `` |
제외할 하나 이상의 테이블 목록입니다. 각 테이블 참조에는 데이터베이스 이름을 포함해야 합니다. 자주 --exclude-databases와 함께 사용됩니다.
--exclude-databases 또는 --exclude-tables를 사용하면, 옵션에 명시된 데이터베이스나 테이블만 제외되고, 나머지 데이터베이스와 테이블은 모두 ndb_restore에 의해 복구됩니다.
다음 테이블은 --exclude-* 옵션을 사용한 여러 ndb_restore 호출(명확성을 위해 다른 필요한 옵션은 생략)과, NDB Cluster 백업에서 복구에 미치는 영향을 보여 줍니다:
Table 25.23 여러 --exclude-* 옵션을 사용한 ndb_restore 호출과, NDB Cluster backup 복구에 미치는 영향.
| Option | Result |
|---|---|
--exclude-databases=db1 | db1를 제외한 모든 데이터베이스의 모든 테이블이 복구됨;<br>db1의 테이블은 복구되지 않음 |
--exclude-databases=db1,db2 (또는<br> --exclude-databases=db1``--exclude-databases=db2) | db1과 db2를 제외한<br>모든 데이터베이스의 모든 테이블이 복구됨;<br>db1과 db2의 테이블은<br>복구되지 않음 |
--exclude-tables=db1.t1 | 데이터베이스 db1에서 테이블 t1을 제외한<br>모든 테이블이 복구됨; db1의 나머지 테이블과<br>다른 모든 데이터베이스의 모든 테이블이 복구됨 |
--exclude-tables=db1.t2,db2.t1 (또는<br> --exclude-tables=db1.t2``--exclude-tables=db2.t1) | 데이터베이스 db1에서 테이블 t2를 제외한<br>모든 테이블, 데이터베이스 db2에서 테이블 t1을 제외한<br>모든 테이블이 복구됨; 그 밖의 db1이나 db2의<br>테이블은 복구되지 않음; 다른 모든 데이터베이스의<br>모든 테이블은 복구됨 |
이 두 옵션은 함께 사용할 수 있습니다. 예를 들어, 다음과 같이 하면, 데이터베이스 db1과 db2를 제외한 모든 데이터베이스의 모든 테이블과, 데이터베이스 db3의 테이블 t1 및 t2를 제외한 테이블들이 복구됩니다:
1$> ndb_restore [...] --exclude-databases=db1,db2 --exclude-tables=db3.t1,db3.t2
(다시 말하지만, 방금 예에서 명확성과 간결성을 위해 다른 필요할 수 있는 옵션은 생략했습니다.)
--include-*와 --exclude-* 옵션을 함께 사용할 수도 있는데, 다음 규칙이 적용됩니다:
--include-* 및 --exclude-* 옵션의 동작은 누적됩니다.--include-* 및 --exclude-* 옵션은 ndb_restore에 전달된 순서대로, 오른쪽에서 왼쪽 순으로 평가됩니다.예를 들어, 다음과 같은 옵션 세트는 ndb_restore가 데이터베이스 db1에서 테이블 db1.t1을 제외한 모든 테이블을 복구하고, 다른 데이터베이스에서는 어떤 테이블도 복구하지 않도록 합니다:
1--include-databases=db1 --exclude-tables=db1.t1
그러나 방금 제시한 옵션 순서를 반대로 하면, 모든 다른 데이터베이스에서는 여전히 테이블이 복구되지 않지만, 이제는 데이터베이스 db1의 모든 테이블(포함하여 db1.t1)이 복구됩니다. 왜냐하면, --include-databases 옵션이 가장 오른쪽에 있으며, 데이터베이스 db1에 대해 첫 번째 일치 옵션이므로, db1이나 그 테이블에 일치하는 어떤 다른 옵션보다 우선하기 때문입니다:
1--exclude-tables=db1.t1 --include-databases=db1
--fields-enclosed-by = char| Property | Value |
|---|---|
| Command-Line Format | --fields-enclosed-by=char |
| Type | String |
| Default Value | `` |
각 칼럼 값은(데이터 타입과 무관하게) 이 옵션에 전달된 문자열로 둘러싸입니다(문자 데이터에만 적용되는 --fields-optionally-enclosed-by 설명 참고).
| Property | Value |
|---|---|
| Command-Line Format | --fields-optionally-enclosed-by |
| Type | String |
| Default Value | `` |
이 옵션에 전달된 문자열은 CHAR, VARCHAR, BINARY, TEXT, ENUM 같은 문자 데이터를 포함하는 칼럼 값을 둘러싸는 데 사용됩니다.
--fields-terminated-by = char| Property | Value |
|---|---|
| Command-Line Format | --fields-terminated-by=char |
| Type | String |
| Default Value | \t (tab) |
이 옵션에 전달된 문자열은 칼럼 값을 구분하는 데 사용됩니다. 기본값은 탭 문자(\t)입니다.
| Property | Value |
|---|---|
| Command-Line Format | --help |
도움말 텍스트를 표시하고 종료합니다.
| Property | Value |
|---|---|
| Command-Line Format | --hex |
이 옵션을 사용하면 모든 바이너리 값이 16진수 형식으로 출력됩니다.
| Property | Value |
|---|---|
| Command-Line Format | `--ignore-extended-pk-updates[=0 |
| Type | Integer |
| Default Value | 0 |
| Minimum Value | 0 |
| Maximum Value | 1 |
--allow-pk-changes를 사용할 때, 테이블의 기본 키의 일부가 되는 칼럼은 백업이 이루어지는 동안 업데이트되어서는 안 됩니다. 이러한 칼럼은 값이 삽입된 이후, 해당 로우가 삭제될 때까지 동일한 값을 유지해야 합니다. 백업을 복구하면서 ndb_restore가 이러한 칼럼의 업데이트를 발견하면, 복구는 실패합니다. 일부 애플리케이션은 칼럼 값이 실제로 변경되지 않았더라도, 로우를 업데이트할 때 모든 칼럼에 대해 값을 설정하는 경우가 있습니다. 이 경우, 백업에는 실제로 수정되지 않은 칼럼의 업데이트로 보이는 로그 이벤트가 포함될 수 있습니다. 이러한 경우 --ignore-extended-pk-updates를 1로 설정하여, ndb_restore가 이러한 업데이트를 무시하도록 강제할 수 있습니다.
주의
이러한 업데이트를 무시하도록 했을 때는, 기본 키의 일부가 되는 칼럼 값에 실제 업데이트가 없도록 하는 책임은 사용자에게 있습니다.
자세한 정보는 --allow-pk-changes의 설명을 참고하십시오.
--include-databases = db-list| Property | Value |
|---|---|
| Command-Line Format | --include-databases=list |
| Type | String |
| Default Value | `` |
복구할 하나 이상의 데이터베이스를 쉼표로 구분한 목록입니다. 흔히 --include-tables와 함께 사용됩니다. 자세한 정보와 예는 해당 옵션 설명을 참고하십시오.
| Property | Value |
|---|---|
| Command-Line Format | --include-stored-grants |
기본적으로 ndb_restore는 shared user와 grant(자세한 내용은 Section 25.6.13, “Privilege Synchronization and NDB_STORED_USER” 참고)를 ndb_sql_metadata 테이블로 복구하지 않습니다. 이 옵션을 지정하면 해당 내용을 복구하도록 합니다.
--include-tables = table-list| Property | Value |
|---|---|
| Command-Line Format | --include-tables=list |
| Type | String |
| Default Value | `` |
복구할 테이블 목록을 쉼표로 구분해 지정합니다. 각 테이블 참조에는 데이터베이스 이름을 포함해야 합니다.
--include-databases 또는 --include-tables를 사용하면, 해당 옵션에 명시된 데이터베이스나 테이블만 복구되고, 나머지 데이터베이스와 테이블은 모두 ndb_restore에 의해 제외(복구되지 않음)됩니다.
다음 테이블은 --include-* 옵션을 사용한 여러 ndb_restore 호출(명확성을 위해 다른 필요한 옵션은 생략)과, NDB Cluster 백업 복구에 미치는 영향을 보여 줍니다:
Table 25.24 여러 --include-* 옵션을 사용한 ndb_restore 호출과, NDB Cluster backup 복구에 미치는 영향.
| Option | Result |
|---|---|
--include-databases=db1 | 데이터베이스 db1의 테이블만 복구됨;<br>다른 모든 데이터베이스의 테이블은 무시됨 |
--include-databases=db1,db2 (또는<br> --include-databases=db1``--include-databases=db2) | 데이터베이스 db1과 db2의 테이블만<br>복구됨; 다른 모든 데이터베이스의 테이블은 무시됨 |
--include-tables=db1.t1 | 데이터베이스 db1의 테이블 t1만 복구됨;<br>db1이나 다른 데이터베이스의 다른 테이블은 복구되지 않음 |
--include-tables=db1.t2,db2.t1 (또는<br> --include-tables=db1.t2``--include-tables=db2.t1) | 데이터베이스 db1의 테이블 t2와,<br>데이터베이스 db2의 테이블 t1만 복구됨;<br>db1, db2 또는 다른 어떤 데이터베이스의<br>다른 테이블도 복구되지 않음 |
이 두 옵션 또한 함께 사용할 수 있습니다. 예를 들어, 다음과 같이 하면 데이터베이스 db1과 db2의 모든 테이블, 그리고 데이터베이스 db3의 테이블 t1과 t2만(다른 데이터베이스나 테이블은) 복구됩니다:
1$> ndb_restore [...] --include-databases=db1,db2 --include-tables=db3.t1,db3.t2
(다시 한 번 말하지만, 위 예에서는 명확성을 위해 필요할 수 있는 다른 옵션은 생략했습니다.)
또한 --include-*(또는 --exclude-*) 옵션 없이도, 아래와 같은 구문을 사용해 선택된 데이터베이스 또는 단일 데이터베이스의 선택된 테이블만 복구할 수 있습니다:
1ndb_restore other_options db_name,[db_name[,...] | tbl_name[,tbl_name][,...]]
즉, 다음 중 하나를 복구 대상으로 지정할 수 있습니다:
하나 이상의 데이터베이스에서 모든 테이블
단일 데이터베이스에서 하나 이상의 테이블
--lines-terminated-by = char
| Property | Value |
|---|---|
| Command-Line Format | --lines-terminated-by=char |
| Type | String |
| Default Value | \n (linebreak) |
각 출력 라인을 끝내는 데 사용되는 문자열을 지정합니다. 기본값은 라인피드 문자(\n)입니다.
| Property | Value |
|---|---|
| Command-Line Format | --login-path=path |
| Type | String |
| Default Value | [none] |
로그인 파일에서 지정된 경로를 읽습니다.
| Property | Value |
|---|---|
| Command-Line Format | --no-login-paths |
로그인 경로 파일에서 옵션을 읽지 않습니다.
| Property | Value |
|---|---|
| Command-Line Format | --lossy-conversions |
이 옵션은 --promote-attributes 옵션을 보완하기 위해 의도되었습니다. --lossy-conversions를 사용하면 백업에서 데이터를 복구할 때, 칼럼 값의 손실 있는 변환(타입 축소 또는 부호 변경)을 허용합니다. 일부 예외를 제외하면, 축소를 지배하는 규칙은 MySQL 복제와 동일합니다. 현재 속성 축소에서 지원되는 특정 타입 변환에 대한 정보는 Section 19.5.1.9.2, “Replication of Columns Having Different Data Types”를 참고하십시오.
이 옵션은 또한 NULL 칼럼을 NOT NULL 칼럼으로 복구하는 것을 가능하게 합니다. 이 칼럼에는 어떤 NULL 항목도 존재해서는 안 되며, 존재할 경우 ndb_restore는 에러와 함께 중단됩니다.
ndb_restore는 손실 있는 변환 동안 수행한 데이터 잘림을 속성과 칼럼당 한 번씩 보고합니다.
| Property | Value |
|---|---|
| Command-Line Format | --no-binlog |
이 옵션은 연결된 SQL 노드가 ndb_restore에 의해 복구된 데이터를 바이너리 로그에 쓰지 못하게 합니다.
| Property | Value |
|---|---|
| Command-Line Format | --no-restore-disk-objects |
이 옵션은 테이블스페이스, 로그 파일 그룹 같은 NDB Cluster Disk Data 오브젝트를 복구하지 않도록 ndb_restore를 중지시킵니다. 이러한 오브젝트에 대한 자세한 내용은 Section 25.6.11, “NDB Cluster Disk Data Tables”를 참고하십시오.
--no-upgrade, -u| Property | Value |
|---|---|
| Command-Line Format | --no-upgrade |
백업을 복구하기 위해 ndb_restore를 사용할 때, 예전 고정 포맷으로 생성된 VARCHAR 칼럼은 현재 사용하는 가변 길이 포맷으로 리사이즈 및 재생성됩니다. 이 동작은 --no-upgrade를 지정하여 무시할 수 있습니다.
| Property | Value |
|---|---|
| Command-Line Format | --ndb-connectstring=connection_string |
| Type | String |
| Default Value | [none] |
ndb_mgmd에 연결하기 위한 연결 문자열을 설정합니다. 구문은 [nodeid=id;][host=]hostname[:port]입니다. 이는 NDB_CONNECTSTRING과 my.cnf에 있는 항목을 오버라이드합니다.
| Property | Value |
|---|---|
| Command-Line Format | --ndb-mgm-tls=level |
| Type | Enumeration |
| Default Value | relaxed |
| Valid Values | relaxed<br>strict |
매니지먼트 서버에 연결할 때 필요한 TLS 지원 수준을 설정합니다. 값은 relaxed 또는 strict 중 하나입니다. relaxed(기본값)는 TLS 연결을 시도하되, 성공을 필수로 요구하지 않음을 의미합니다. strict는 연결에 TLS가 반드시 필요함을 의미합니다.
| Property | Value |
|---|---|
| Command-Line Format | --ndb-mgmd-host=connection_string |
| Type | String |
| Default Value | [none] |
--ndb-connectstring과 동일합니다.
--ndb-nodegroup-map = map, -z| Property | Value |
|---|---|
| Command-Line Format | --ndb-nodegroup-map=map |
이 옵션에 설정된 값은 무시되며, 옵션 자체도 아무 동작도 하지 않습니다.
| Property | Value |
|---|---|
| Command-Line Format | --ndb-nodeid=# |
| Type | Integer |
| Default Value | [none] |
--ndb-connectstring에 의해 설정된 ID를 오버라이드하여, 이 노드의 노드 ID를 설정합니다.
| Property | Value |
|---|---|
| Command-Line Format | --ndb-optimized-node-selection |
트랜잭션을 위한 노드 선택 최적화를 활성화합니다. 기본적으로 활성화되어 있으며, --skip-ndb-optimized-node-selection으로 비활성화할 수 있습니다.
| Property | Value |
|---|---|
| Command-Line Format | --ndb-tls-search-path=list |
| Type | Path name |
| Default Value (Unix) | $HOME/ndb-tls |
| Default Value (Windows) | $HOMEDIR/ndb-tls |
CA 파일을 검색할 디렉터리 목록을 지정합니다. Unix 플랫폼에서는 디렉터리 이름이 콜론(:)으로 구분되며, Windows 시스템에서는 세미콜론(;)이 구분자로 사용됩니다. 디렉터리 참조는 상대 또는 절대 경로일 수 있고, 하나 이상의 환경 변수를 포함할 수 있습니다(각각은 $ 프리픽스로 표시되며, 사용 전에 확장됩니다).
검색은 가장 왼쪽에 명시된 디렉터리부터 시작하여, 파일이 발견될 때까지 왼쪽에서 오른쪽 순으로 진행됩니다. 빈 문자열은 빈 검색 경로를 의미하며, 이는 모든 검색이 실패함을 의미합니다. 점(.)만으로 이루어진 문자열은 검색 경로가 현재 작업 디렉터리로 제한됨을 뜻합니다.
검색 경로가 제공되지 않으면, 컴파일 시점에 내장된 기본값이 사용됩니다. 이 값은 플랫폼에 따라 다릅니다. Windows에서는 \ndb-tls이고, 기타 플랫폼(Linux 포함)에서는 $HOME/ndb-tls입니다. 이는 -DWITH_NDB_TLS_SEARCH_PATH를 사용해 NDB Cluster를 컴파일함으로써 오버라이드할 수 있습니다.
| Property | Value |
|---|---|
| Command-Line Format | --no-defaults |
로그인 파일 이외의 어느 옵션 파일에서도 기본 옵션을 읽지 않습니다.
--nodeid = #, -n| Property | Value |
|---|---|
| Command-Line Format | --nodeid=# |
| Type | Numeric |
| Default Value | none |
백업이 수행된 데이터 노드의 노드 ID를 지정합니다. 필수입니다.
백업이 수행된 클러스터와 데이터 노드 수가 다른 클러스터에 복구할 때, 이 정보는 특정 노드에 복구해야 할 올바른 파일 세트를 식별하는 데 도움이 됩니다(이러한 경우, 하나의 데이터 노드에 여러 파일을 복구해야 하는 것이 일반적입니다). 추가 정보와 예는 Restoring to a different number of data nodes를 참고하십시오.
--num-slices = #| Property | Value |
|---|---|
| Command-Line Format | --num-slices=# |
| Type | Integer |
| Default Value | 1 |
| Minimum Value | 1 |
| Maximum Value | 1024 |
백업을 슬라이스 단위로 복구할 때, 백업을 분할할 슬라이스 수를 설정합니다. 이를 통해 여러 ndb_restore 인스턴스가 서로 겹치지 않는 서브셋을 병렬로 복구하게 함으로써, 복구에 필요한 시간을 줄일 수 있습니다.
슬라이스(slice) 는 주어진 백업에서 데이터 서브셋을 의미합니다. 즉, 동일한 슬라이스 ID를 가진 프래그먼트 집합입니다. 슬라이스 ID는 --slice-id 옵션을 사용해 지정합니다. 이 두 옵션은 항상 함께 사용해야 하며, --slice-id로 설정한 값은 슬라이스 수보다 항상 작아야 합니다.
ndb_restore는 프래그먼트를 발견할 때마다 프래그먼트 카운터를 할당합니다. 슬라이스 단위로 복구할 때는, 각 프래그먼트에 슬라이스 ID를 할당하며, 이 슬라이스 ID는 0 이상 슬라이스 수-1 이하 범위의 값입니다. BLOB 테이블이 아닌 경우, 주어진 프래그먼트가 속하는 슬라이스는 다음과 같은 공식으로 결정합니다:
1[slice_ID] = [fragment_counter] % [number_of_slices]
BLOB 테이블의 경우 프래그먼트 카운터를 사용하지 않습니다. 대신 프래그먼트 번호와 BLOB 테이블의 메인 테이블 ID(참고로 NDB는 BLOB 값을 내부적으로 별도의 테이블에 저장합니다)를 사용합니다. 이 경우 주어진 프래그먼트의 슬라이스 ID는 다음과 같이 계산됩니다:
1[slice_ID] = 2([main_table_ID] + [fragment_ID]) % [number_of_slices]
따라서, _N_개의 슬라이스로 복구한다는 것은, 모든 인스턴스에서 --num-slices=N(및 기타 필요한 옵션들)을 사용하면서, 각각 --slice-id=1, --slice-id=2, --slice-id=3, …, slice-id=N-1을 지정하여, _N_개의 ndb_restore 인스턴스를 실행하는 것을 의미합니다.
예제.
백업 이름이 BACKUP-1이고, 각 데이터 노드의 노드 파일 시스템에서 기본 디렉터리인 /var/lib/mysql-cluster/BACKUP/BACKUP-3에 있다고 가정합니다. 이를 노드 ID가 1, 2, 3, 4인 네 개의 데이터 노드로 구성된 클러스터에 복구하려고 합니다. 이 작업을 다섯 개의 슬라이스를 사용해 수행하기 위해서는, 다음 리스트에 표시된 명령 세트를 실행합니다:
다음과 같이 ndb_restore를 사용해 클러스터 메타데이터를 복구합니다:
1$> ndb_restore -b 1 -n 1 -m --disable-indexes --backup-path=/home/ndbuser/backups
다음과 같이 ndb_restore를 호출해, 데이터 노드에 클러스터 데이터를 복구합니다:
1$> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 2$> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 3$> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 4$> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 5$> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 6 7$> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 8$> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 9$> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 10$> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 11$> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 12 13$> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 14$> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 15$> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 16$> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 17$> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 18 19$> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 20$> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 21$> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 22$> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 23$> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
위 단계에서 보여 준 모든 명령은, 클러스터에 대한 연결 슬롯이 충분하다면 병렬로 실행할 수 있습니다(자세한 내용은 --backup-path 옵션 설명 참고).
다음과 같이 인덱스를 평소처럼 복구합니다:
1$> ndb_restore -b 1 -n 1 --rebuild-indexes --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
마지막으로, 다음과 같이 명령을 실행하여 에포크(epoch)를 복구합니다:
1$> ndb_restore -b 1 -n 1 --restore-epoch --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
슬라이스는 클러스터 데이터 복구에만 사용해야 합니다. 메타데이터, 인덱스, 에포크 정보를 복구할 때는 --num-slices나 --slice-id를 사용할 필요가 없습니다. 이러한 항목 복구를 제어하는 ndb_restore 옵션과 함께 이들 옵션 중 하나 또는 둘 다를 사용하는 경우, 프로그램은 이를 무시합니다.
--parallelism 옵션이 복구 속도에 미치는 효과는, 슬라이싱이나 여러 ndb_restore 인스턴스를 사용한 병렬 복구로 인한 효과와는 독립적입니다(--parallelism은 단일 ndb_restore 스레드가 실행하는 병렬 트랜잭션(동시 로우)의 수를 지정합니다). 하지만 이 옵션은 두 방식 모두와 함께 사용할 수 있습니다. --parallelism 값을 증가시키면, 클러스터에 더 큰 부하를 가하게 되며, 시스템이 이를 감당할 수 있다면 복구는 더 빠르게 완료될 것입니다.
--num-slices의 값은 CPU나 CPU 코어 수, RAM 용량 등과 같은 하드웨어 관련 값에 직접적으로 의존하지 않으며, LDM 수에도 의존하지 않습니다.
동일 복구 과정에서 서로 다른 데이터 노드에 대해 이 옵션에 서로 다른 값을 사용하는 것도 가능합니다. 이를 사용하는 것만으로는 어떤 부정적인 영향도 발생하지 않습니다.
--parallelism = #, -p| Property | Value |
|---|---|
| Command-Line Format | --parallelism=# |
| Type | Numeric |
| Default Value | 128 |
| Minimum Value | 1 |
| Maximum Value | 1024 |
ndb_restore는 많은 로우를 동시에 적용하기 위해 단일 로우 트랜잭션을 사용합니다. 이 파라미터는 하나의 ndb_restore 인스턴스가 사용하려 하는 병렬 트랜잭션(동시 로우)의 수를 결정합니다. 기본값은 128이고, 최소는 1, 최대는 1024입니다.
INSERT 작업은 관련 데이터 노드의 스레드에 걸쳐 병렬화됩니다. 이 메커니즘은 퍼지 스냅샷 데이터인 .Data 파일에서 대량 데이터를 복구할 때 사용됩니다. 인덱스를 생성하거나 재구축할 때는 사용되지 않습니다. 변경 로그는 순차적으로 적용되며, 인덱스 드롭과 빌드는 DDL 작업이기 때문에 별도로 처리됩니다. 복구 클라이언트 측에는 스레드 수준 병렬성이 없습니다.
| Property | Value |
|---|---|
| Command-Line Format | --preserve-trailing-spaces |
고정 길이 문자 데이터 타입을 가변 길이 타입으로 승격할 때, 즉 CHAR 칼럼 값을 VARCHAR로, BINARY 칼럼 값을 VARBINARY로 승격할 때, 트레일링 스페이스가 유지되도록 합니다. 그렇지 않으면, 이러한 칼럼 값에 포함된 트레일링 스페이스는 새 칼럼에 INSERT될 때 제거됩니다.
참고
CHAR 칼럼을 VARCHAR로, BINARY 칼럼을 VARBINARY로 승격할 수는 있지만, VARCHAR 칼럼을 CHAR로, VARBINARY 칼럼을 BINARY로 승격하는 것은 불가능합니다.
| Property | Value |
|---|---|
| Command-Line Format | --print |
ndb_restore가 모든 데이터, 메타데이터, 로그를 stdout에 출력하도록 합니다. 이는 --print-data, --print-meta, --print-log 옵션을 함께 사용하는 것과 동일합니다.
참고
--print 또는 어떤 --print_* 옵션을 사용하면, 사실상 드라이 런을 수행하는 것입니다. 이러한 옵션 중 하나 이상이 포함되면, 모든 출력은 stdout으로 리디렉션됩니다. 이런 경우 ndb_restore는 NDB Cluster에 데이터나 메타데이터를 복구하려는 시도를 하지 않습니다.
| Property | Value |
|---|---|
| Command-Line Format | --print-data |
ndb_restore가 출력을 stdout으로 보냅니다. 자주 --tab, --fields-enclosed-by, --fields-optionally-enclosed-by, --fields-terminated-by, --hex, --append와 함께 사용됩니다.
TEXT 및 BLOB 칼럼 값은 항상 잘립니다. 이러한 값은 출력에서 처음 256바이트만 남게 잘리며, --print-data 사용 시 현재 이 동작을 오버라이드할 수 없습니다.
| Property | Value |
|---|---|
| Command-Line Format | --print-defaults |
프로그램 인수 목록을 출력하고 종료합니다.
| Property | Value |
|---|---|
| Command-Line Format | --print-log |
ndb_restore가 로그를 stdout으로 출력하게 합니다.
| Property | Value |
|---|---|
| Command-Line Format | --print-meta |
모든 메타데이터를 stdout으로 출력합니다.
| Property | Value |
|---|---|
| Command-Line Format | --print-sql-log |
SQL 문을 stdout으로 로깅합니다. 이 옵션을 사용하여 기능을 활성화합니다. 기본적으로는 비활성화되어 있습니다. 이 옵션은 로그를 시도하기 전에, 복구되는 모든 테이블에 명시적으로 정의된 기본 키가 있는지를 확인합니다. NDB가 구현하는 히든 기본 키만 가지는 테이블에 대한 쿼리는 유효한 SQL로 변환할 수 없습니다.
이 옵션은 BLOB 칼럼이 있는 테이블에서는 동작하지 않습니다.
| Property | Value |
|---|---|
| Command-Line Format | --progress-frequency=# |
| Type | Numeric |
| Default Value | 0 |
| Minimum Value | 0 |
| Maximum Value | 65535 |
백업이 진행되는 동안 _N_초마다 상태 보고서를 출력합니다. 0(기본값)은 상태 보고서를 출력하지 않음을 의미합니다. 최대값은 65535입니다.
| Property | Value |
|---|---|
| Command-Line Format | --promote-attributes |
ndb_restore는 MySQL 복제에서 지원되는 방식과 거의 동일하게 제한된 속성 승격을 지원합니다. 즉, 특정 타입의 칼럼에서 백업한 데이터는 일반적으로 “더 크고 유사한” 타입의 칼럼에 복구할 수 있습니다. 예를 들어, CHAR(20) 칼럼에서의 데이터는 VARCHAR(20), VARCHAR(30), CHAR(30)로 선언된 칼럼에 복구할 수 있고, MEDIUMINT 칼럼에서의 데이터는 INT 또는 BIGINT 타입의 칼럼에 복구할 수 있습니다. 현재 속성 승격에서 지원되는 타입 변환 테이블은 Section 19.5.1.9.2, “Replication of Columns Having Different Data Types”를 참고하십시오.
이 옵션은 또한 NOT NULL 칼럼을 NULL 칼럼으로 복구하는 것을 가능하게 합니다.
ndb_restore의 속성 승격은 다음과 같이 명시적으로 활성화해야 합니다:
백업을 복구할 테이블을 준비합니다. ndb_restore는 원래 정의와 다른 정의로 테이블을 재생성할 수 없습니다. 즉, 테이블을 수동으로 생성하거나, 테이블 메타데이터를 복구한 다음 데이터를 복구하기 전에 ALTER TABLE을 사용해 승격하고자 하는 칼럼을 ALTER해야 합니다.
테이블 데이터를 복구할 때 --promote-attributes 옵션(단축형 -A)과 함께 ndb_restore를 호출합니다. 이 옵션을 사용하지 않으면 속성 승격은 발생하지 않으며, 대신 복구 작업은 에러와 함께 실패합니다.
문자 데이터 타입과 TEXT 또는 BLOB 간의 변환을 수행할 때, 문자 타입(CHAR, VARCHAR)과 바이너리 타입(BINARY, VARBINARY) 간의 변환만 한 번에 수행할 수 있습니다. 예를 들어, 한 번의 ndb_restore 호출에서, INT 칼럼을 BIGINT로 승격하면서 동시에 VARCHAR 칼럼을 TEXT로 승격하는 것은 불가능합니다.
서로 다른 캐릭터 세트를 사용하는 TEXT 칼럼 간의 변환은 지원되지 않으며, 명시적으로 허용되지 않습니다.
문자 또는 바이너리 타입에서 TEXT나 BLOB로 변환을 수행할 때, ndb_restore가 하나 이상의 스테이징 테이블을 생성하고 사용하는 것을 볼 수 있습니다. 이러한 테이블 이름은 table_name$STnode_id 형식을 사용합니다. 이 테이블은 이후에 필요하지 않으며, 일반적으로 복구가 성공적으로 완료된 후 ndb_restore에 의해 삭제됩니다.
| Property | Value |
|---|---|
| Command-Line Format | --rebuild-indexes |
네이티브 NDB 백업을 복구하는 동안 정렬 인덱스의 멀티스레드 재구축을 활성화합니다. 이 옵션과 함께 ndb_restore가 정렬 인덱스를 빌드하는 데 사용하는 스레드 수는 BuildIndexThreads 데이터 노드 구성 파라미터와 LDM 수에 의해 제어됩니다.
이 옵션은 ndb_restore를 처음 실행할 때 한 번만 사용하면 됩니다. 그러면 이후 노드를 복구할 때 --rebuild-indexes를 다시 사용하지 않더라도 모든 정렬 인덱스가 재빌드됩니다. 데이터베이스에 새 로우를 INSERT하기 전에 이 옵션을 사용하는 것이 좋습니다. 그렇지 않으면, 나중에 인덱스를 재빌드할 때 유니크 제약 조건 위반을 발생시키는 로우가 INSERT될 수 있습니다.
기본적으로 정렬 인덱스의 빌드는 LDM 수만큼 병렬화됩니다. 노드 및 시스템 재시작 중에 수행되는 오프라인 인덱스 빌드는 BuildIndexThreads 데이터 노드 구성 파라미터를 사용해 더 빠르게 수행할 수 있습니다. 이 파라미터는 ndb_restore에 의한 인덱스 드롭 및 재빌드에는 영향을 미치지 않으며, 이는 온라인으로 수행됩니다.
유니크 인덱스를 재빌드할 때는 REDO 로깅 및 로컬 체크포인팅을 위한 디스크 쓰기 대역폭을 사용합니다. 이 대역폭이 충분하지 않으면 REDO 버퍼 오버로드 또는 로그 오버로드 에러가 발생할 수 있습니다. 이 경우 다시 한 번 ndb_restore--rebuild-indexes를 실행할 수 있으며, 이때 프로세스는 에러가 발생한 지점부터 재개됩니다. 일시적인 에러를 만났을 때도 동일하게 할 수 있습니다. --parallelism 값을 줄여서 이러한 에러 발생을 줄일 수 있을 수도 있으며, 부족한 공간 때문에 문제가 발생한 경우, REDO 로그 크기(FragmentLogFileSize 노드 구성 파라미터)를 늘리거나, LCP가 더 빠르게 수행되도록 MaxDiskWriteSpeed 및 관련 파라미터의 값을 증가시켜, 공간을 더 빨리 확보할 수 있습니다.
| Property | Value |
|---|---|
| Command-Line Format | --remap-column=string |
| Type | String |
| Default Value | [none] |
--restore-data와 함께 사용할 때, 이 옵션은 지정된 칼럼 값에 함수를 적용합니다. 인수 문자열에 포함된 값은 다음과 같습니다:
db: 데이터베이스 이름으로, 이는 --rewrite-database로 수행된 이름 변경 이후의 이름입니다.tbl: 테이블 이름.col: 업데이트할 칼럼 이름입니다. 이 칼럼은 INT 또는 BIGINT 타입이어야 합니다. UNSIGNED일 수도 있고 아닐 수도 있습니다.fn: 함수 이름으로, 현재 지원되는 이름은 offset 하나뿐입니다.args: 함수에 제공되는 인수입니다. 현재는 offset 함수에서 더할 offset 크기 하나만 지원됩니다. 음수 값도 지원됩니다. 인수 크기는 칼럼 타입의 signed variant의 크기를 초과할 수 없습니다. 예를 들어, _col_이 INT 칼럼이라면, offset 함수에 전달할 수 있는 인수의 허용 범위는 -2147483648에서 2147483647까지입니다(자세한 내용은 Section 13.1.2, “Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT,offset을 칼럼에 적용하는 과정에서 오버플로 또는 언더플로가 발생하면, 복구 작업은 실패합니다. 예를 들어, 칼럼이 BIGINT이고, 칼럼 값이 4294967291인 로우에 대해 offset 값 8을 적용하려 할 때, 4294967291 + 8 = 4294967299 > 4294967295이므로 실패가 발생합니다.
이 옵션은 동일 스키마를 사용하는 여러 소스 NDB Cluster 인스턴스에 저장된 데이터를, NDB 네이티브 백업(자세한 내용은 Section 25.6.8.2, “Using The NDB Cluster Management Client to Create a Backup” 참고)과 ndb_restore를 사용해 단일 대상 NDB Cluster로 머지하려 할 때 유용합니다. 이때 소스 클러스터 간 기본 및 유니크 키 값이 서로 겹칠 수 있으며, 프로세스의 일부로 이러한 값을 겹치지 않는 범위로 리맵해야 할 수 있습니다. 또한 테이블 간 다른 관계를 유지해야 할 수도 있습니다. 이러한 요구사항을 충족하기 위해, 하나의 ndb_restore 호출에서 여러 번 이 옵션을 사용해 서로 다른 테이블의 칼럼을 리맵할 수 있습니다. 예는 다음과 같습니다:
1$> ndb_restore --restore-data --remap-column=hr.employee.id:offset:1000 \ 2 --remap-column=hr.manager.id:offset:1000 --remap-column=hr.firstaiders.id:offset:1000
(여기에 표시되지 않은 다른 옵션도 사용할 수 있습니다.)
--remap-column은 동일 테이블의 여러 칼럼을 업데이트하는 데도 사용할 수 있습니다. 여러 테이블과 칼럼 조합도 가능합니다. 동일 테이블의 서로 다른 칼럼에 서로 다른 offset 값을 사용할 수도 있습니다. 예는 다음과 같습니다:
1$> ndb_restore --restore-data --remap-column=hr.employee.salary:offset:10000 \ 2 --remap-column=hr.employee.hours:offset:-10
소스 백업에 머지하면 안 되는 중복 테이블이 포함된 경우, --exclude-tables, --exclude-databases 또는 애플리케이션에서의 다른 수단을 사용해 처리할 수 있습니다.
머지 대상 테이블의 구조 및 기타 특성에 관한 정보는 SHOW CREATE TABLE, ndb_desc 도구, MAX(), MIN(), LAST_INSERT_ID() 등의 MySQL 함수를 사용하여 얻을 수 있습니다.
머지된 테이블과 머지되지 않은 테이블 간 또는 그 반대 방향으로, 서로 다른 NDB Cluster 인스턴스에서 변화를 복제하는 것은 지원되지 않습니다.
--restore-data, -r| Property | Value |
|---|---|
| Command-Line Format | --restore-data |
NDB 테이블 데이터와 로그를 출력합니다.
--restore-epoch, -e| Property | Value |
|---|---|
| Command-Line Format | --restore-epoch |
클러스터 복제 상태 테이블에 에포크(epoch) 정보를 추가(복구)합니다. 이는 NDB Cluster 레플리카에서 복제를 시작할 때 유용합니다. 이 옵션을 사용하면, mysql.ndb_apply_status 테이블에서 id 칼럼의 값이 0인 로우가 이미 존재하는 경우 이를 업데이트하고, 존재하지 않으면 INSERT합니다(자세한 내용은 Section 25.7.9, “NDB Cluster Backups With NDB Cluster Replication” 참고).
--restore-meta, -m| Property | Value |
|---|---|
| Command-Line Format | --restore-meta |
이 옵션은 ndb_restore가 NDB 테이블 메타데이터를 출력하도록 합니다.
복원 프로그램 ndb_restore를 처음 실행할 때는 메타데이터도 복원해야 합니다. 즉, 데이터베이스 테이블을 다시 생성해야 하며, 이는 --restore-meta(-m) 옵션을 사용해 실행함으로써 수행할 수 있습니다. 메타데이터는 단일 데이터 노드에서만 복원하면 되며, 이로써 전체 클러스터에 메타데이터를 복원하는 데 충분합니다.
대상 클러스터의 로컬 데이터 매니저 스레드 수를, 원래 클러스터의 데이터 노드에서 사용된 값과 다르게 변경하지 않는 한, ndb_restore는 대상 클러스터에 대해 기본 파티션 수를 사용합니다.
이 옵션을 사용할 때는, ndb_restore가 메타데이터 복원을 완료할 때까지 ndb_metadata_check=OFF로 자동 동기화를 비활성화할 것을 권장합니다. 그 이후에는 새로 NDB 딕셔너리에 생성된 오브젝트를 동기화하기 위해 이를 다시 활성화할 수 있습니다.
참고
백업을 복구하기 시작할 때, 클러스터는 빈 데이터베이스를 가져야 합니다. 즉, 복구를 수행하기 전에 데이터 노드를 --initial 옵션과 함께 시작해야 합니다.
--rewrite-database = olddb,newdb| Property | Value |
|---|---|
| Command-Line Format | --rewrite-database=string |
| Type | String |
| Default Value | none |
이 옵션을 사용하면 백업에서 사용된 데이터베이스 이름과 다른 이름을 가진 데이터베이스로 복구할 수 있습니다. 예를 들어, products라는 데이터베이스에 대해 백업을 생성했을 때, 그 데이터를 inventory라는 데이터베이스로 복구하려면, (필요할 수 있는 다른 옵션을 생략하고) 다음과 같이 사용할 수 있습니다:
1$> ndb_restore --rewrite-database=product,inventory
이 옵션은 하나의 ndb_restore 호출에서 여러 번 사용할 수 있습니다. 따라서, db1이라는 데이터베이스로부터 db2라는 데이터베이스로, db3이라는 데이터베이스로부터 db4라는 데이터베이스로 동시에 복구하는 것도 가능합니다. 이때는 --rewrite-database=db1,db2 --rewrite-database=db3,db4를 사용합니다. 여러 번의 --rewrite-database 사이에 다른 ndb_restore 옵션을 사용할 수도 있습니다.
여러 개의 --rewrite-database 옵션 간에 충돌이 있을 경우, 왼쪽에서 오른쪽으로 읽었을 때 마지막에 위치한 --rewrite-database 옵션만 적용됩니다. 예를 들어, --rewrite-database=db1,db2 --rewrite-database=db1,db3를 사용하면, --rewrite-database=db1,db3만 적용되고, --rewrite-database=db1,db2는 무시됩니다. 또한 --rewrite-database=db1,db3 --rewrite-database=db2,db3를 사용하면, db1과 db2 데이터베이스의 모든 테이블과 데이터가 db3 데이터베이스로 복구됩니다.
주의
--rewrite-database를 사용해 여러 백업 데이터베이스에서 하나의 대상 데이터베이스로 복구할 때, 테이블이나 기타 오브젝트 이름 간의 충돌 여부는 검사되지 않으며, 로우가 복구되는 순서도 보장되지 않습니다. 이는 이러한 경우 로우가 오버라이트되고 업데이트가 손실될 수 있음을 의미합니다.
| Property | Value |
|---|---|
| Command-Line Format | --skip-broken-objects |
이 옵션은 네이티브 NDB 백업을 읽는 동안, 손상된 테이블을 무시하고, (역시 손상되지 않은) 나머지 테이블에 대해서는 복구를 계속하도록 ndb_restore에 지시합니다. 현재 --skip-broken-objects 옵션은 missing BLOB 파트 테이블에 대해서만 동작합니다.
| Property | Value |
|---|---|
| Command-Line Format | --skip-table-check |
테이블 메타데이터를 복구하지 않고 데이터만 복구할 수도 있습니다. 기본적으로 이 작업을 수행할 때, 테이블 데이터와 테이블 스키마 간에 불일치가 발견되면 ndb_restore는 에러와 함께 실패합니다. 이 옵션은 이러한 동작을 오버라이드합니다.
데이터를 복구할 때 칼럼 정의 불일치에 대한 일부 제한은 완화되었습니다. 이러한 유형의 불일치가 발생하면, ndb_restore는 이전처럼 에러와 함께 중단하는 대신, 데이터를 수용하고 대상 테이블에 INSERT하면서, 이러한 동작이 실행되고 있음을 나타내는 경고를 사용자에게 출력합니다. 이 동작은 --skip-table-check나 --promote-attributes 옵션 사용 여부와 관계없이 발생합니다. 이러한 칼럼 정의 차이는 다음과 같은 유형입니다:
다른 COLUMN_FORMAT 설정(FIXED, DYNAMIC, DEFAULT)
다른 STORAGE 설정(MEMORY, DISK)
다른 기본값
다른 distribution key 설정
| Property | Value |
|---|---|
| Command-Line Format | --skip-unknown-objects |
이 옵션을 사용하면, 네이티브 NDB 백업을 읽는 동안 인식하지 못하는 스키마 오브젝트를 무시하도록 ndb_restore에 지시합니다. 예를 들어 NDB 7.6에서 실행 중인 클러스터에서 만들어진 백업을, NDB Cluster 7.5를 실행 중인 클러스터에 복구할 때 사용할 수 있습니다.
--slice-id = #| Property | Value |
|---|---|
| Command-Line Format | --slice-id=# |
| Type | Integer |
| Default Value | 0 |
| Minimum Value | 0 |
| Maximum Value | 1023 |
슬라이스 단위로 복구할 때, 이 옵션은 복구할 슬라이스의 ID를 지정합니다. 이 옵션은 항상 --num-slices와 함께 사용되며, 그 값은 항상 --num-slices 값보다 작아야 합니다.
자세한 내용은 이 섹션의 다른 곳에 있는 --num-slices 설명을 참고하십시오.
--tab = dir_name, -T dir_name| Property | Value |
|---|---|
| Command-Line Format | --tab=path |
| Type | Directory name |
--print-data가 테이블당 하나의 덤프 파일을 생성하게 하며, 각 파일 이름은 tbl_name.txt입니다. 인자로는 파일을 저장할 디렉터리 경로가 필요합니다. 현재 디렉터리는 .으로 지정합니다.
--timestamp-printouts| Property | Value |
|---|---|
| Command-Line Format | `--timestamp-printouts{=true |
| Type | Boolean |
| Default Value | true |
정보, 에러, 디버그 로그 메시지에 타임스탬프 프리픽스를 붙입니다.
이 옵션은 기본적으로 활성화되어 있습니다. --timestamp-printouts=false로 비활성화할 수 있습니다.
| Property | Value |
|---|---|
| Command-Line Format | --usage |
도움말 텍스트를 표시하고 종료합니다. --help와 같습니다.
--verbose = #| Property | Value |
|---|---|
| Command-Line Format | --verbose=# |
| Type | Numeric |
| Default Value | 1 |
| Minimum Value | 0 |
| Maximum Value | 255 |
출력의 상세(verbosity) 수준을 설정합니다. 최소값은 0, 최대값은 255이며, 기본값은 1입니다.
| Property | Value |
|---|---|
| Command-Line Format | --version |
버전 정보를 표시하고 종료합니다.
| Property | Value |
|---|---|
| Command-Line Format | --with-apply-status |
백업의 ndb_apply_status 테이블에 있는 모든 로우(단, server_id = 0인 로우는 --restore-epoch를 사용해 생성되므로 제외)를 복구합니다. 이 옵션을 사용하려면, --restore-data도 함께 사용해야 합니다.
백업의 ndb_apply_status 테이블에 이미 server_id = 0인 로우가 포함되어 있으면, ndb_restore--with-apply-status는 이를 삭제합니다. 이러한 이유로, --with-apply-status 옵션을 사용해 클러스터를 복구한 후에는 ndb_restore--restore-epoch를 사용하는 것이 좋습니다. 또한, 클러스터를 복구하기 위해 사용하는 마지막 ndb_restore--with-apply-status 호출과 동시에 --restore-epoch를 사용할 수도 있습니다.
자세한 내용은 ndb_apply_status Table을 참고하십시오.
이 유틸리티의 typical 옵션은 다음과 같습니다:
1ndb_restore [-c connection_string] -n node_id -b backup_id \ 2 [-m] -r --backup-path=/path/to/backup/files
일반적으로 NDB Cluster 백업에서 복구할 때, ndb_restore는 최소한 --nodeid(단축형 -n), --backupid(단축형 -b), --backup-path 옵션을 필요로 합니다.
-c 옵션은 ndb_restore에 클러스터 매니지먼트 서버 위치를 알려 주는 연결 문자열을 지정하는 데 사용됩니다(자세한 내용은 Section 25.4.3.3, “NDB Cluster Connection Strings” 참고). 이 옵션을 사용하지 않으면, ndb_restore는 localhost:1186의 매니지먼트 서버에 연결을 시도합니다. 이 유틸리티는 클러스터 API 노드로 동작하므로, 클러스터 매니지먼트 서버에 연결하기 위한 free 연결 “슬롯”이 필요합니다. 따라서 클러스터 config.ini 파일에는 적어도 하나의 사용 가능한 [api] 혹은 [mysqld] 섹션이 있어야 합니다. 이러한 이유로, MySQL 서버나 다른 애플리케이션에 사용되지 않는 [api] 또는 [mysqld] 섹션을 config.ini에 적어도 하나는 남겨 두는 것이 좋습니다(자세한 내용은 Section 25.4.3.7, “Defining SQL and Other API Nodes in an NDB Cluster” 참고).
ndb_restore는 --decrypt 및 --backup-password를 사용해 암호화된 백업을 복호화할 수 있습니다. 복호화를 수행하려면 두 옵션 모두를 지정해야 합니다. 암호화된 백업 생성에 관한 정보는 START\ BACKUP 매니지먼트 클라이언트 명령의 문서를 참고하십시오.
ndb_restore가 클러스터에 연결되었는지는, ndb_mgm 매니지먼트 클라이언트에서 SHOW 명령을 사용해 확인할 수 있습니다. 시스템 셸에서 다음과 같이 수행할 수도 있습니다:
1$> ndb_mgm -e "SHOW"
Error reporting. ndb_restore는 일시적인 에러와 영구적인 에러 모두를 보고합니다. 일시적인 에러의 경우 복구할 수 있는 경우가 있으며, 이러한 경우 Restore successful, but encountered temporary error, please look at configuration이라는 메시지를 보고합니다.
주의
순환 복제(circular replication)에 사용할 NDB Cluster를 초기화하기 위해 ndb_restore를 사용한 후에는, 레플리카 역할을 하는 SQL 노드에서 바이너리 로그가 자동으로 생성되지 않으며, 이를 수동으로 생성해야 합니다. 바이너리 로그를 생성하려면, START\ REPLICA를 실행하기 전에 해당 SQL 노드에서 SHOW TABLES 문을 실행하십시오. 이는 NDB Cluster의 알려진 이슈입니다.
25.5.22 ndb_redo_log_reader — Check and Print Content of Cluster Redo Log
25.5.24 ndb_secretsfile_reader — Obtain Key Information from an Encrypted NDB Data File