MySQL 테이블 엔진 변경하기
MySQL에서는 ALTER TABLE 명령어를 사용하여 이미 생성된 테이블의 스토리지 엔진을 손쉽게 변경할 수 있습니다. 기본 문법은 다음과 같습니다.
ALTER TABLE 테이블명 ENGINE = 엔진이름;
예제 테이블 생성
문법을 실제로 이해하기 위해 먼저 MyISAM 엔진을 사용하는 테이블을 생성해 보겠습니다. 이후 이 테이블의 엔진을 다른 엔진으로 변경하는 과정을 살펴보겠습니다. 아래는 테이블을 생성하는 쿼리입니다.
mysql> create table ChangeEngineTableDemo -> ( -> MovieId int, -> MovieName varchar(100), -> IsPopular bool -> )ENGINE = 'MyISAM'; Query OK, 0 rows affected (0.37 sec)
위 쿼리를 보면 테이블 엔진이 MyISAM으로 설정되어 있습니다. 이제 이 엔진을 원하는 다른 엔진으로 변경할 수 있습니다. 여기서는 엔진 타입을 InnoDB로 변경해 보겠습니다. 엔진 타입을 변경하는 쿼리는 다음과 같습니다.
테이블 엔진 변경하기
mysql> alter table ChangeEngineTableDemo ENGINE = InnoDB; Query OK, 0 rows affected (2.21 sec) Records: 0 Duplicates: 0 Warnings: 0
쿼리가 정상적으로 실행되면 위와 같은 결과가 출력됩니다. 데이터가 많은 테이블일수록 변경에 더 많은 시간이 소요될 수 있습니다.
변경 결과 확인하기
엔진 타입이 실제로 변경되었는지 확인하려면 SHOW CREATE TABLE 명령어를 사용하면 됩니다. 확인 쿼리는 다음과 같습니다.
mysql> show create table ChangeEngineTableDemo;
위 쿼리를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ChangeEngineTableDemo | CREATE TABLE `changeenginetabledemo` ( `MovieId` int(11) DEFAULT NULL, `MovieName` varchar(100) DEFAULT NULL, `IsPopular` tinyint(1) DEFAULT NULL ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci | +-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.03 sec)
출력 결과에서 ENGINE = InnoDB 부분을 통해 엔진이 성공적으로 MyISAM에서 InnoDB로 변경되었음을 확인할 수 있습니다.
주요 MySQL 스토리지 엔진 비교
엔진을 변경하기 전에 각 엔진의 특징을 알아두면 도움이 됩니다.
- InnoDB: 트랜잭션(ACID) 지원, 외래 키(Foreign Key) 지원, 행 수준 잠금(Row-level Locking) 제공. 대부분의 경우 권장되는 기본 엔진입니다.
- MyISAM: 트랜잭션을 지원하지 않지만 읽기 작업이 빠르고 구조가 단순합니다. 전체 테이블 잠금(Table-level Locking) 방식을 사용합니다.
- MEMORY: 데이터를 메모리에 저장하여 매우 빠르지만, 서버 재시작 시 데이터가 사라집니다.
주의사항
테이블 엔진을 변경할 때는 몇 가지 유의해야 할 점이 있습니다. MyISAM에서 InnoDB로 변경 시 전체 텍스트 인덱스(Full-text Index)나 공간 인덱스(Spatial Index) 등 일부 기능의 호환성 문제가 발생할 수 있으며, 대용량 테이블의 경우 변경 작업 중 테이블이 잠길 수 있으므로 서비스 트래픽이 적은 시간대에 작업하는 것이 좋습니다. 또한 변경 전에는 반드시 데이터 백업을 수행하는 것을 권장합니다.