Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 MyISAM을 InnoDB 스토리지 엔진으로 변환하는 방법

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 데이터베이스명 명령어나 정보 스키마를 활용한 스크립트를 사용할 수 있습니다.