Posted
Filed under Application
|| English || 中文 || view 9369 ||

MySQL
Windows에서 운영 중인 MySQL 서버 응용 프로그램 오류를 내면서 실행이 중단되는 경우가 있다. 원인은 다양한 것으로 보인다. 원인을 찾기 위해 살펴보아야 하는 로그도 몇 군데 있다. 그래도 가장 확실한 해결책은 서버를 다시 설치하는 것이다. 특히 데이터 테이블과 테이블스페이스의 정보가 일치하지 않거나 ibdata1 파일이 망가진 경우는 더 그렇다. 데이터가 꼬여있는 상태에서 서버를 다시 설치하거나 업그레이드해 봐야 같은 오류가 나타난다. 다음과 같은 절차를 따라서 복구해 보도록 한다.

1. 서버(서비스)를 중단하고 my.ini 파일과 data 폴더를 안전한 곳에 복사한다.주1
2. my.ini 파일을 열고 적당한 위치(가장 마지막 줄)에 "innodb_force_recovery=1"(따옴표 제외)을 입력하여 저장한 후 MySQL 서비스를 시작한다. 만약 그래도 응용 프로그램 오류가 나타나면 "innodb_force_recovery=2"로 바꿔서 재시도 하고 그래도 오류가 나타나면 숫자만 3, 4, 5, 6으로 높여준다. "innodb_force_recovery" 옵션에서는 선택문(SELECT)만 사용할 수 있다. 모든 오류를 무시하고 일단 내용을 읽어 백업이라도 받게 해주는 옵션으로 생각하면 된다.
3. bin 폴더를 명령 프롬프트로 열고 다음 명령을 실행한다. "mysqldump --user=root --password=sample --all-databases > all.sql" 패스워드는 자신의 것을 사용한다. 모든 데이터베이스를 all.sql 파일로 저장하라는 명령이다. 다른 옵션들은 도움말을 참조하도록 한다. all.sql은 적당한 이름으로 자신이 정해주면 된다. 이 파일은 bin 폴더에 생긴다.주2 별다른 진행 상태가 나타나지는 않고 백업이 끝나면 프롬프트가 나타난다.
4. 서버(서비스)를 중단한다.
5. data 폴더에서 mysql 폴더를 제외한 다른 폴더와 파일들을 모두 삭제한다.주3 특히 ibdata1 파일은 반드시 지운다.
6. my.ini 파일에서 "innodb_force_recovery" 행을 지우거나 주석 처리(#)한다.
7. 서버(서비스)를 다시 시작한다.
8. bin 폴더를 명령 프롬프트로 열고 다음 명령을 실행한다. "mysql --user=root --password=sample < all.sql" 부등호의 방향이 바뀌는 것에 주의한다. data 폴더에 데이터베이스들이 복원된다.

MySQL 서버는 data 폴더만 있으면 바로 업그레이드할 수 있기 때문에 가급적 최신 버전의 서버 프로그램을 사용하도록 한다. 단, 업그레이드한 다음에는 테이터베이스 테이블들을 점검(Check)하여 수정(Repair)해 주는 것이 좋다.

  1. 이 자료들만 있으면 적어도 원래와 같이 언제든지 복원이 가능하다. 혹시 문제가 생겼을 때를 대비하는 것이므로 모든 과정이 제대로 끝나면 나중에 지워도 된다. [Back]
  2. mysqldump 파일로 생성한 백업 파일은 MySQL Administrator의 Restore 도구에서는 복원할 수 없다. [Back]
  3. 그대로 두어도 상관은 없다. 그리고 mysql 폴더를 지우면 root의 패스워드 등 관리자 정보도 같이 없어지기 때문에 주의한다. [Back]
  ◐ 관련 글 ◑   ◐ 100일간 인기 글 ◑
 
Creative Commons License 이 저작물은 크리에이티브 커먼즈 코리아 저작자 표시-비영리-변경 금지 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다.


RSS 2.0 feed
ATOM 1.0 feed
Tag , ,
Response
You can track responses via RSS / ATOM feed
RSS 2.0 feed
ATOM 1.0 feed