본문 바로가기

[DataBase]/DB

# mysql, mariadb 백업 안된 쿼리 or 테이블 or 데이터 or 프로시저 등 복구(mysqlbinlog 이용하기)

반응형

mysql, mariadb 백업 안된 쿼리 or 테이블 or 데이터 or 프로시저 등 복구(mysqlbinlog 이용하기)

상황 : DB 최근 백업일은 1일, 프로시저 생성일은 2일, 프로시저 드랍일은 3일

이렇게 실수로 프로시저를 지워버린 상황이다.
백업본은 따로 없으며, 프로시저 뿐만이 아니라 쿼리 or 테이블 or 데이터 or 프로시저 등 모두 해당된다.

해결 방법

  1. show variables like 'expire_logs_days' 이 명령어를 통해 로그파일이 언제까지 저장되는지 확인한다.
    해당 기간내에 작성한 쿼리들은 모두 저장됨으로 내가 작성한 날짜가 해당 날짜 안에 포함되는지 확인이 필요하다. 만약 해당 기간이 지났을 경우... 😥😥
  2. db의 로그데이터가 저장되는 폴더로 찾아간다 나의 경우에는 /data/mariadb/log-bin/ 였으며, 경로가 어디로 설정되어있는지는
    Linux: /etc/my.cnf 또는 /etc/mysql/my.cnf
    Windows: C:\Program Files\MySQL\MySQL Server\my.ini 또는 C:\Windows\my.ini
    에서 log_bin옵션에서 확인이 가능하다.
  3. 해당 경로에서 mysql-bin.xxxxxx등의 파일 여러개를 찾을 수 있을것이다. 내가 생성한 쿼리의 날짜의 파일 이름을 기억해두자. 해당 파일은 이진파일이라 읽을 수가 없다.
    해당 파일을 mysqlbinlog를 이용해 읽을 수 있게 변경해야한다.
  4. mysql이 설치된 경로로 찾아간다
    which mysql 명령어를 통해 mysql이 어디에 설치된지 찾을 수 있다. ex. /usr/local/mariadb/bin/mysql 등으로 찾을 수 있다.
  5. 해당 경로(/usr/local/mariadb/bin/)에 mysqlbinlog를 실행할 수 있을것이다.
    명령어 : mysqlbinlog /data/mariadb/log-bin/mysql-bin.xxxxxx > output.sql 등으로 실행하면 output.sql 파일이 생겼을 것이다.
    해당 파일을 열고 검색을 통해 내가 원하는 생성한 ddl 또는 쿼리 등등을 찾을 수 있을 것이다.

끝!

반응형