MyISAM 엔진으로 생성된 MySQL 테이블을 InnoDB로 변환하려면 ALTER 명령어를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 변환 과정을 단계별로 살펴보겠습니다.
1. MyISAM 엔진으로 테이블 생성하기
먼저 MyISAM 엔진을 사용하는 테이블을 생성해 보겠습니다.
mysql> create table MyISAMToInnoDBDemo -> ( -> id int, -> Name varchar(100) -> )ENGINE=MyISAM; Query OK, 0 rows affected (0.19 sec)
2. 테이블의 스토리지 엔진 확인하기
테이블이 MyISAM 엔진으로 정상적으로 생성되었는지 확인하려면 information_schema.TABLES 뷰를 조회하면 됩니다.
mysql> SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES
-> WHERE TABLE_SCHEMA = 'business' AND ENGINE = 'MyISAM';
실행 결과, MyISAM 엔진으로 생성된 테이블이 다음과 같이 조회됩니다.
+-------------------------+--------+ | TABLE_NAME | ENGINE | +-------------------------+--------+ | studentrecordwithmyisam | MyISAM | +-------------------------+--------+ 1 row in set (0.00 sec)
3. ALTER 명령어로 InnoDB로 변환하기
이제 ALTER TABLE 명령어를 사용해 MyISAM 테이블을 InnoDB로 변환합니다.
mysql> alter table MyISAMToInnoDBDemo engine=InnoDB; Query OK, 0 rows affected (1.65 sec) Records: 0 Duplicates: 0 Warnings: 0
4. 변환 결과 확인하기
변환이 정상적으로 완료되었는지 확인하려면 동일한 방식으로 information_schema를 조회하되, 조건을 ENGINE = 'InnoDB'로 변경합니다.
mysql> SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES
-> WHERE TABLE_SCHEMA = 'test' AND ENGINE = 'InnoDB';
출력 결과를 보면 해당 테이블의 엔진이 InnoDB로 변경된 것을 확인할 수 있습니다.
+--------------------+--------+ | TABLE_NAME | ENGINE | +--------------------+--------+ | myisamtoinnodbdemo | InnoDB | +--------------------+--------+ 1 row in set (0.00 sec)
참고 사항
- 트랜잭션 지원: InnoDB는 ACID 트랜잭션과 행 수준 잠금(Row-level Locking)을 지원하므로, 동시성 처리가 많은 애플리케이션에 적합합니다.
- FULLTEXT 인덱스: MySQL 5.6 미만 버전에서는 InnoDB가 FULLTEXT 인덱스를 지원하지 않으므로, 전문 검색 기능이 필요한 경우 버전을 확인해야 합니다.
- 외래 키(Foreign Key): MyISAM에는 없던 외래 키 제약 조건이 InnoDB에서 활성화되므로, 변환 시 데이터 무결성에 영향이 없는지 검토하는 것이 좋습니다.
- 대량 변환: 여러 테이블을 한 번에 변환하려면
mysqlcheck --engine=InnoDB 데이터베이스명명령어나 정보 스키마를 활용한 스크립트를 사용할 수 있습니다.