우선 간단하게 Binary Log에 대해서 알아보고 가자

Binary Log는 MariaDB가 CREATE, ALTER, DROP, INSERT, UPDATE, DELETE 등의 데이터를 수정하는 쿼리를 실행할 때마다 발생한다.

일반적으로 데이터에 수정이 발생하지 않는 SELECT나 SHOW는 로깅되지 않지만, 옵션을 설정한다면 같이 로깅할 수 있다. (다만 성능에 악영향을 줄 수 있다.)

자세한 내용은 MariaDB 문서를 참고하면 될 거 같다.

 

일단 Binary Log를 생성하기 위해서는 환경설정을 해야하는데, 저번에 작성한 설치 및 환경설정 글에 백업을 위한 로깅부분에서 설명해두었으니, 해당 글을 참고하면 될 거 같다.

 

우선 테스트를 위해 간단하게 binlog_test 스키마와 user_info 테이블을 만들었다.

-- 스키마 생성
CREATE DATABASE binlog_test;
USE binlog_test;

-- 테이블 생성
CREATE TABLE user_info (
	id int not null auto_increment primary key,
    name varchar(20) not null,
    reg_date timestamp default '0000-00-00 00:00:00',
    update_date timestamp not null on update current_timestamp
);

-- 데이터 삽입
INSERT INTO user_info(name) VALUES('mon0mon');

-- 데이터 변경
UPDATE user_info SET name='mon0mon_mod' WHERE name='mon0mon';

 

이제 데이터를 넣고, 조회해본다.

 

이후 update로 데이터를 변경해본다.

 

 

마지막으로 데이터를 완전히 지워본다.

 

 

이후에 자신이 설정해둔 binlog 파일 저장 경로로 이동해준다.

 

설정을 제대로 해두었다면, mysql-bin.# 형식으로 파일들이 생성된 것을 볼 수 있다.

이제 이 파일을 cat으로 확인해보자

뭔가 출력이 되긴 했는데, 여기저기 글자가 제대로 인코딩되지 않아서 깨지는게 보인다.

이 상태로는 로그를 읽을 수 없으므로 mysqlbinlog을 이용해서 sql 파일로 변환이 필요하다.

 

mysqlbinlog --no-defaults {로그} > {저장위치 및 형식}

 

mysqlbinlog로 바로 실행 할 때 mysqlbinlog: unknown variable 'default-character-set=utf8mb4' 에러가 발생한다.

이는 예전 mysql에 존재하던 default-character-set 이란 환경변수가 현재는 없기 때문인데, 이를 해결하기 위해서 가장 간단한 방법인 --no-default로 옵션파일을 제외하고 실행하면 정상적으로 작동한다.

자세한 내용은 정식문서이 글을 참고하길 바란다.

 

생성된 sql 파일을 vscode로 열어봤다.

아까 생성한 binlog_test 스키마와 유저 생성 테이블이 있는 것을 볼 수 있다.

 

좀더 자세한 내용은 이 링크를 참고하면 좋을거 같다.

 

'DB > MariaDB' 카테고리의 다른 글

리눅스 MariaDB 설치 및 환경설정  (0) 2022.08.04

+ Recent posts