MySQL DB Table 유실로 인한 장애시 Mysql Binary 로그를 통한 복구
[장애 유형]
MySQL DB Table 유실로 인한 장애시 Mysql Binary 로그를 통한 복구.
[환경]
MySQL
[원인]
고객사에서 PHPMYADMIN을 이용한 DB작업 도중 실수로 Table를 통째로 지워버리는 상황 발생
[해결방안]
이런 경우 일반적인 바이너리로그를 이용한 복구 방법인 "mysqlbinlog 바이너리로그 > mysql -u 계정" 의 방식으로 복구를 시도 하게 되면 해당 문제가 발생한 쿼리까지 진행이 되기 때문에 복구가 불가능 한 문제가 있음.
다행히 해당 고객사의 경우 DB생성 당시부터의 로그가 모두 보관되어 있었음. 이에 다른 Mysql서버를 이용해서 복구에 성공함.
전체 바이너리 로그를 위의 방법으로 복구 한 후에 해당 문제가 발생한 시점이 포함된 로그를 이용해서 아래와 같이 문제 발생 시점의 이전까지만 복구를 진행해서 해당 테이블의 데이터를 복구 할 수 있었음.
"Mysqlbinlog -d DB이름 -start-datetime=xxxx-xx-xx xx:xx:xx -stop-datetime=xxxx-xx-xx xx:xx:xx > mysql -u 계정"
위의 방법으로 DB의 특정 시간대의 로그만을 이용해서 복구를 진행 할 수 있음.
단 위의 방법으로 모든 데이터를 복구 할 수 있었던 이유는 해당 DB의 데이터/로그를 모두 가지고 있었기에 가능 했음,
만약 DATA가 없는 상황이라면 위 방법으로도 복구는 불가능 함.