공개하기부끄러운블로그
공개하기부끄러운블로그
공개하기부끄러운블로그
전체 방문자
오늘
어제
  • 🥇Home (110)
    • 👨🏻‍💻Infra (73)
      • 🌐Network (4)
      • 🐧Linux (27)
      • 🌎Cloud (9)
      • ⚫️Virtualization (2)
      • 🐳Docker & Kubernetes (1)
      • 🟦WEB & WAS (18)
      • 🟩IaC (0)
      • 🟨CI & CD (0)
      • ⚙️Application (6)
      • 💻Monitoring (2)
      • 📡HA (4)
    • 👨🏻‍💻Development (3)
      • 💻Frontend (2)
      • 💾Backend (0)
      • 🐍Bash (1)
    • 💾Data (16)
      • 🧩Database (13)
      • 📁Storage (3)
    • 🎓BBS (14)
    • 👨‍👧‍👧Git (0)

최근 글

인기 글

최근 댓글

태그

  • CentOS6 PostgreSQL
  • 2022년 정보처리기사 필기 정리
  • 2022 정보처리기사 정리
  • 정보처리기사 덤프
  • 라이믹스
  • 2022 정보처리기사 실기
  • 2022년 정보처리기사 필기
  • 정보처리기사 실기
  • 정보처리기사 실기 덤프
  • Tomcat 취약점
  • 정보처리기사 정리
  • 톰캣 HTTP 헤더
  • log4j 취약점
  • 2022 정보처리기사 덤프
  • RHCS
  • CentOS7 PostgreSQL
  • 2022년 정보처리기사 문제
  • 정보처리기사 필기
  • 정보처리기사
  • 2022년 정보처리기사 실기
  • 2022년 정보처리기사
  • 2022년 정보처리기사 덤프
  • 2022 정보처리기사 필기
  • pacemaker
  • 톰캣 버전 노출
  • Tomcat 버전 노출
  • CentOS8 PostgreSQL
  • Tomcat HTTP 헤더
  • 정보처리기사 문제집 추천
  • 2022년 정보처리기사 정리

티스토리

hELLO · Designed By 정상우.
공개하기부끄러운블로그

공개하기부끄러운블로그

💾Data/🧩Database

MYSQL 복구

2020. 3. 24. 15:37
반응형

회사 직원의 실수로 Mysql 을 특정 DB를 날렸다.
결국 복구는 했지만 백업화일을 만들어 두지 않아서 나름 귀찮고 힘든 과정이었다.
그래서 mysql 를 날렸을때 복구하는 방법을 간단하게나마 설명하고자 한다.

root 계정으로 작업하고 /usr/local/mysql 을 기본 디렉토리로 본다는 가정하에.. ^^

mysqldump를 이용한 백업화일이 존재하는 경우
/usr/local/mysql/bin/mysql -u root -p < BackUp.sql
가장 쉽게 복구하는 방법이다.

하지만 이 경우 문제점이 있다.
Cron 등의 프로그램으로 매일 백업을 받는다고 하더라도...
백업받은 시점과 DB를 날린 시점에서의 데이터는 다를수 있기 때문이다.

그런 부분을 커버 할수 있는것이 binlog 이다.
원래 binlog는 replication 을 위한 것인데... replication 이 아닌 복구용도로도 훌륭한 데이터이다.
/etc/my.cnf 에..
log-bin 라는 부분이 주석처리 되어 있지않으면..
mysql 은 기본적으로 /usr/local/mysql/data 디렉토리에 Host명-bin.000001 Host명-bin.000002 .... 과 같은
형식으로 만들어 질것이다. mysql을 재시작할때마다 Host명-bin.0000001 에서 숫자부분이 늘어난 화일이
생성되며 그 화일에 새롭게 기록한다.

※ mysql binlog 디렉토리 설정
my.cnf 에서
log_bin            = /usr/local/mysql/data/mysql-bin.log <== 이런식의 설정도 가능하다.

bin 로그에는 기본적으로 DDL(Create, Alter, Drop)문과 DML중 Insert Update Delect 문등이 기록되는데..
이 기록들은 기본적으로 데이터에 변화를 주는 SQL문들이다..

bin 로그를 보려면 log의 데이터를변환해야한다.
binlog는 기본적으로 바이너리로 되어 있기에 텍스트 형태로 푸는 과정이 필요하다.
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/Host명-bin.000001 >> 1.sql
이와 같은 과정으로 모든 binlog를 푼다..

vi 등으로 보면 시간 및 각각의 sql문들이 보일것이다..

※ 로그화일 쪼개기
가끔 log 화일이 너무 커서 제대로 인식이 안되는 경우가 있다.
이런 경우 split 이라는 훌륭한 툴이 있다.
split -l 100000 1.sql
10만 라인별로 1.sql 을 xaa, xab, aac..... 순으로 화일이 생성되면서 짜른다.

자 이제 복구를 하자라고 하고 싶지만..
여기서 주의 할것이 있다..
처음에... drop database 같은 sql 을 날렸다면
이 역시 binlog에 포함되어 있을것이다.
맨 마지막 로그 화일을 열어서 그부분을 삭제 또는 주석처리하자..
그렇지 않으면 애써 복구한것을 마지막에 다시 또 날리는 되는 결과를 .....

이제서야 복구를 할수 있을것이다.
/usr/local/mysql/bin/mysql -u root -p < 1.sql

만약 여기서도 5만줄쯤에서 오류가 났다라고 한다면...
1.sql 에서 1~49999 까지는 실행이 되었다.
그러므로 1~49999 를 삭제(vi 로 연다음 d49999 이라고 입력하고 Enter ...)한다.

그리고 문제가 되는 첫줄(1~49999를 삭제하기전에는 오류가 난 5만번째라인)의 SQL 부분을 해결한다음...
저장....
그리고 다시 복구과정을 반복
/usr/local/mysql/bin/mysql -u root -p < 1.sql

php 스쿨 [서버운영] Drop 된 Mysql Binlog를 이용한 복구 과정 에서 퍼 왔습니다.

출처: https://frody.tistory.com/8 [Frody's]

출처: https://frody.tistory.com/8 [Frody's]

반응형
저작자표시

'💾Data > 🧩Database' 카테고리의 다른 글

Oracle 필수 프로세스  (0) 2020.04.14
MySQL Replication 단방향 이중화  (0) 2020.04.13
MYSQL 초기 패스워드 및 설정파일 위치  (0) 2020.02.22
mysql 정리1  (0) 2019.10.08
Binary Log(binlog)  (0) 2019.06.20
    '💾Data/🧩Database' 카테고리의 다른 글
    • Oracle 필수 프로세스
    • MySQL Replication 단방향 이중화
    • MYSQL 초기 패스워드 및 설정파일 위치
    • mysql 정리1
    공개하기부끄러운블로그
    공개하기부끄러운블로그
    IT 기술 블로그

    티스토리툴바