[MYSQL]DB복구(innodb)

2020. 7. 13. 17:48 Database/mysql

중요(장애시) : MYSQL이 죽은 상태에서 해야 씽크가 맞음!! 


ibdata 파일과 함께 테이블 정보가 있는 frm 파일준비 방법은 다음과 같습니다.

  1. MYSQL을 새로 설치한 후에 복구를 원하는 계정,database을 만듭니다.(ibdata, frm 사전백업)
  2. 이전 폴더에 database 이름으로 되어 있는 폴더를 그대로 새로운 폴더에 집어 넣습니다.
    해당 폴더에는 해당 database의 테이블 정보가 들어 있는 frm 파일들이 있습니다.
  3. C:\ProgramData\MySQL\MySQL Server 5.5\data 하단폴더 전체
  4. o    The .frm file for each InnoDB table.

    o    The tablespace files.

    o    The InnoDB log files.

    o    Any InnoDB configuration options, such as those stored in option files. The configuration options are required in case you need to restore the backup from scratch. In that case, you'll need to know how the tablespace and log files were created originally.

  5. 윈도우 기준으로 Mysql 설치 폴더/my.ini 이하 my.ini 파일에 innodb_force_recovery라는 명령어를 추가 시켜 주고 서비스를 재시작 하면 강제 복구 모드로 설정된다.
    예) innodb_force_recovery = 1 ~ 6
  6. 그리고 다시 실행하면 잘 됩니다.

---------------------------------------------------------------


재설치 설치 오류시(삭제)


제어판 Mysql삭제

C:\Program Files\MySQL 폴더삭제

C:\Users\Administrator\AppData -> MySql 검색후 전부삭제

C:\ProgramData\MySQL\MySQL Server 5.5 폴더삭제

D:\MySQL Datafiles 폴더삭제


---------------------------------------------------------------


윈도우 기준으로 Mysql 설치 폴더/my.ini 이하 my.ini 파일에 innodb_force_recovery라는 명령어를 추가 시켜 주고 서비스를 재시작 하면 강제 복구 모드로 설정된다.
예) innodb_force_recovery = 1
숫자는 1에서 6까지 사용 가능하며, 1이 가장 안전하고 좋은 복구 모드이고, 1에서 복구가 안된다면 1~6까지 순차적으로 값을 바꿔가야 한다.
자세한 내용은 http://www.mysqlkorea.co.kr/sub.html?mcode=manual&scode=01&m_no=21875&cat1=14&cat2=422&cat3=442&lang=k 를 참고 하길 바란다.

위와 같이 프로그램을 시작하면 서비스가 정상적으로 시작하게 되며 그후에 dump로 파일을 백업 시킬 수 있다.
덤프 명령어는 Mysql설치폴더/bin에서 mysqldump -u계정명 -p 데이터베이스명 > 백업할파일.sql 로 하면 백업이 되고
반대로 mysqldump -a -u계정명 -p 데이터베이스명 < 백업할파일.sql 이와 같이 하면 복원이 된다.

만약 1이 아닌 복구 모드로 실행시 파일이 전체적으로 백업되지 않았을 경우 복구 모드에 우선순위를 높여 select 명령어로 검사후 csv파일로 저장
저장 후 벌크 인서트로 파일 다시 불러옴
벌크는 http://kr.blog.yahoo.com/freud19390723/79 를 참고

복원이 완료 된 후에는 innodb_force_recovery = 1를 삭제후 프로그램 재시작을 한다.

간단히 설명하자면 파일이 손상된 경우
1. 서비스 시작 중지
2. my.ini파일에 innodb_force_recovery = 1~6 값 설정 후 저장
3. 서비스 시작
4. 서비스 시작시 정상 동작이면 6. 아니면 5.
5. 정상 동작이 아닐경우 다른 복구 모드를 선택하여 서비스 시작
6. 정상 동작일 경우 mysqldump로 파일 백업
7. 높은 우선순위로 변경하여 파일로 저장후 벌크 인서트로 다시 넣음
8. 복구 모드 삭제 후 서비스 재시작



출처: https://applejara.tistory.com/554?category=83070 [애플자라]