날려 먹은 MySQL 데이터를 복구할 수 있을까?

2024. 10. 20. 04:45·Dev/삽질 방지
반응형

실수로 DROP DATABASE 쿼리를 입력하거나 WHERE문을 빼먹었다면 눈앞이 캄캄해질 것이다. 과연 데이터를 복구할 수 있을지 여부를 알아보자.

복구 방법 등에 대해서는 본 글에서 다루지 않는다.

우선 아래부터 확인해보자

  • 저장 방식이 하드디스크인지
  • 바이너리 로그가 켜져 있는지
  • MySQL 버전이 8.4 이후인지
  • 백업 파일이 있는지

바이너리 로그 방식

바이너리 로그는 세가지 방식이 있다.

  • STATEMENT: 쿼리만 저장.
  • ROW: 변경된 Row의 정보까지 저장. MySQL 8.4 이후 기본값이다.
  • MIXED: 일부 쿼리에만 ROW 방식으로 저장. 일반적으로 사용되지 않고 이 옵션을 사용할 정도라면 이미 백업 자동화를 진행한 사용자일 것이므로 본 글에서는 설명하지 않음.

복원 가능 여부

하드디스크인 경우

즉시 서버 전원을 강제 종료하고, 글을 읽도록 하자. 이 글을 읽는 중에도 데이터가 덮어씌어져 복구가 어려워질 가능성이 있다.

바이너리 로그 방식이 STATEMENT인 경우

백업 파일과 백업 시점부터 복원하려는 시점까지의 바이너리 로그가 있다면 파괴적 명령어 입력 전으로 되돌릴 수 있다.

만약 백업 파일이 없다면 복원이 불가능하다.
일부 바이너리 로그가 손실되었다면 어느정도 복구는 가능하나 완벽하게 복구는 불가능하다.

이 시점에서 하드디스크를 사용중이라면 용산에 하드디스크를 맡겨서 복구를 시도해 볼 수도 있을 것이다. SSD라면 포기하자.

바이너리 로그 방식이 ROW인 경우

당신이 MySQL 8.4 이상을 사용한다면 다행이다! ROW가 기본값이다.

변경 내역까지 기록이 되므로 바이너리 로그 파일만 확보한다면 백업 파일 유무와 관계 없이 복원이 가능하다.

무조건 ROW가 좋은 것 아닌가요?

ROW는 모든 변경사항을 다 기록하는 방식이라 용량이 크기에 실제 프로덕션에서 사용하기는 부적절하다. 따라서 정기적인 데이터베이스 백업과 STATEMENT 방식의 바이너리 로그를 조합해서 사용하는 것이 가장 적절할 것이다.

마치며

자료를 날려먹고 이 글을 보는 중이라면, 지금 당장 바이너리 로그와 데이터베이스 백업 파일을 즉시 확보해두도록 하자. 이 파일들은 용량이 부족하거나 며칠이 지나면 자동으로 삭제된다.

항상 백업은 철저히 하도록 하자.

반응형
저작자표시 (새창열림)
'Dev/삽질 방지' 카테고리의 다른 글
  • [Datadog] HTTP 5XX일때만 Error tracking이 동작하는 문제 고치기
  • [Datadog] RUM에서 document 페이지 추적하기
  • GKE에서 autoscaling/v2가 오류나는 경우 해결 방법
  • Visual Studio Code에서 Integrated Terminal 사용 시 .bash_profile을 읽어오지 않을 경우
ryush00
ryush00
IT 관련 글이 올라와요
    반응형
  • ryush00
    말똥이의 블로그
    ryush00
  • 전체
    오늘
    어제
    • 모든 글 (223)
      • 블로그 (13)
        • 공지 사항 (5)
        • 블로그 운영 팁 (6)
        • 기타 (2)
      • IT (69)
        • 정보글 (51)
        • 리뷰 (8)
        • 심층 분석 (5)
        • NAS (5)
      • Game (44)
        • Minecraft (40)
        • 게임 정보글 (4)
      • Dev (53)
        • PHP (1)
        • HTML & CSS (0)
        • Ruby (3)
        • DB (2)
        • 클라우드 (2)
        • 행사 (0)
        • 삽질 방지 (20)
      • 마인리스트 (10)
      • 이모저모 (21)
        • 나의 생각 (7)
        • 나의 일상 (4)
        • 유용한 것들 (3)
        • 노하우 (6)
      • 휴지통 (0)
      • 안전 (0)
        • 베리어프리 (0)
        • 교통 안전 (0)
  • 블로그 메뉴

    • 전체글
    • 공지사항
  • 링크

    • 마인리스트
  • 공지사항

    • 저작권 안내
  • 인기 글

  • 태그

    티스토리
    맥
    클라우드플레어
    howto
    ruby
    문제해결
    apk
    spigot
    MySQL
    php
    bukkit
    삽질
    java
    오류
    NAS
    Ruby on Rails
    CloudFlare
    구글 지도
    개발
    마인크래프트
    블로그
    해킹
    티스토리 초대장
    애플
    마인리스트
    토렌트
    안드로이드
    구글 지도 반출
    아이폰
    시놀로지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
ryush00
날려 먹은 MySQL 데이터를 복구할 수 있을까?
상단으로

티스토리툴바