14.11.7 온라인 DDL에서 충돌 복구의 작동 방식
ALTER TABLE
문이 실행되는 동안 서버가 충돌해도 데이터가 손실되지 않지만, 충돌 복구 프로세스는 클러스터 된 인덱스 의 경우와 보조 인덱스 의 경우 다릅니다.
InnoDB 보조 인덱스를 작성하는 동안 서버가 충돌했을 경우, MySQL은 복구시에 부분적으로 생성 된 인덱스를 삭제합니다. ALTER TABLE
또는 CREATE INDEX
문을 다시 실행해야합니다.
InnoDB의 클러스터 된 인덱스를 작성하는 동안 충돌이 발생한 경우, 테이블의 데이터를 완전히 새로운 클러스터 된 인덱스에 복사해야하기 때문에 복구는 더 복잡합니다. 모든 InnoDB 테이블이 클러스터 된 인덱스로 저장된다는 점에 유의하십시오. 다음의 설명은 테이블과 클러스터 된 인덱스라는 말을 구별없이 사용하고 있습니다.
MySQL은 기존 데이터를 원래의 InnoDB 테이블에서 원하는 인덱스 구조를 임시 테이블에 복사하여 새 클러스터 된 인덱스를 만듭니다. 데이터가 임시 테이블에 완전히 복사되면 원래 테이블의 이름이 다른 임시 테이블 이름으로 변경됩니다. 새 클러스터 된 인덱스로 구성된 임시 테이블의 이름이 원래 테이블의 이름으로 변경되어 원래의 테이블은 데이터베이스에서 삭제됩니다.
새 클러스터 된 인덱스를 작성하는 동안 시스템 충돌이 발생하면 데이터가 손실되지 않지만이 과정에서 존재하는 임시 테이블을 사용하여 복구 프로세스를 완료해야합니다. 클러스터 된 인덱스를 다시 만들거나 큰 테이블에서 기본 키를 다시 정의하거나 혹은이 조작 중 시스템 충돌이 발생하는 것은 드물기 때문에이 책에서는이 시나리오에서 복구에 관한 정보는 제공하지 않습니다.