MySQL에서 테이블과 인덱스의 변경은 데이터 타입 및 문자 집합을 처리하는 방식과 관련이 있습니다. 필요한 테이블 복구나 업그레이드 작업은 CHECK TABLE, mysqlcheck, mysql_upgrade 명령을 통해 확인할 수 있습니다.
테이블 재구축(Rebuild) 방법
MySQL에서 테이블을 재구축하는 방법은 여러 가지가 있으며, 대표적으로 아래 세 가지가 사용됩니다.
- 덤프 후 리로드(Dump and Reload) 방식
- ALTER TABLE 방식
- REPAIR TABLE 방식
각 방법에 대해 자세히 살펴보겠습니다.
1. 덤프 후 리로드(Dump and Reload) 방식
바이너리(in-place) 업그레이드 이후 서로 다른 MySQL 버전 간 호환성 문제로 기존 테이블을 정상적으로 처리할 수 없는 경우에는 덤프 후 리로드 방식을 사용해야 합니다.
테이블은 덤프한 뒤 다시 불러오는 과정을 통해 재구축할 수 있습니다. mysqldump를 사용해 덤프 파일을 생성하고, mysql 클라이언트로 해당 파일을 다시 로드하면 됩니다.
mysqldump db_name t1 > dump.sql mysql db_name < dump.sql
하나의 데이터베이스에 있는 모든 테이블을 재구축하려면 테이블 이름 없이 데이터베이스 이름만 지정하면 됩니다.
mysqldump db_name > dump.sql mysql db_name < dump.sql
모든 데이터베이스의 모든 테이블을 재구축해야 한다면 --all-databases 옵션을 사용합니다.
mysqldump --all-databases > dump.sql mysql < dump.sql
2. ALTER TABLE 방식
ALTER TABLE 방식으로 테이블을 재구축하려면 'null 변경(null alteration)'을 활용할 수 있습니다. 즉, 실질적인 구조 변경 없이 스토리지 엔진을 지정하는 ALTER TABLE 문을 실행하면 MySQL이 테이블을 새로 재구성합니다.
예를 들어 TblName이라는 InnoDB 테이블을 재구축하려면 아래와 같은 문장을 실행하면 됩니다.
ALTER TABLE TblName ENGINE = InnoDB;
3. REPAIR TABLE 방식
REPAIR TABLE 방식은 MyISAM, ARCHIVE, CSV 테이블에만 적용됩니다. 테이블 검사 결과 파일이 손상되었거나 업그레이드가 필요하다는 진단이 나올 경우 REPAIR TABLE 문을 사용할 수 있습니다.
예를 들어 MyISAM 테이블을 복구하려면 아래 문장을 실행합니다.
REPAIR TABLE TblName;
mysqlcheck --repair 명령을 사용하면 커맨드 라인에서 REPAIR TABLE 문과 동일한 작업을 수행할 수 있습니다. 특히 --databases 옵션으로 특정 데이터베이스의 테이블만 복구하거나, --all-databases 옵션으로 모든 데이터베이스의 모든 테이블을 한 번에 복구할 수 있어 더욱 편리합니다.
mysqlcheck --repair --databases db_name ... mysqlcheck --repair --all-databases