우선 간단하게 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

MariaDB 설치

설치에 앞서 환경별로 패키지 및 세부 사항이 다르므로 확인이 필요하다

필자의 환경은 Ubuntu 20.04.4 LTS이다.

sudo apt update && sudo apt upgrade -y

우선 apt update를 해서 최신 리스트 정보를 가져온다.

이후 apt upgrade로 업데이트가 필요한 패키지들을 전부 업데이트 해준다.

sudo apt search maria

apt search로 원하는 mariadb 버전을 찾는다.

본문에서는 mariadb-server로 설치를 진행하려고 한다.

버전은 1:10.3.34-0이다.

sudo apt install mariadb-server -y

-y 옵션을 주어서 설치 확인을 스킵한다.

설치가 완료된 이후에 아래 명령어를 넣어서 제대로 설치가 되었는지 확인한다.

sudo apt list | grep 'maria'

이제 설치는 정상적으로 된 것이라 할 수 있다.

이 상태에서도 바로 사용할 순 있지만, 여러가지 설정을 더 해주면 좋다.

 

 

 

환경설정

  1. root 계정 비밀번호 설정
  2. 기본 문자 인코딩 utf8mb4로 변경
  3. 백업 및 디버깅을 위한 Log 설정
  4. root 계정 비밀번호 설정

 

  • root 계정 비밀번호 설정
sudo mysql

설치한 직후 mysql root 계정은 비밀번호가 따로 설정되어 있지 않기에, 별도로 비밀번호를 설정해주는 것이 좋다.

우선 root 권한으로 mysql을 실행한다.

SHOW databases;

나오는 3개의 데이터베이스 중 mysql을 선택해서 user 테이블을 검색한다.

USE mysql;
SELECT Host, User, Password FROM user;

root의 password 칸이 비어있는 걸 확인할 수 있다.

-- MariaDB 10.4 미만
UPDATE user SET password=('사용할 비밀번호') where user='root';

-- MariaDB 10.4 이상
SET password=('사용할 비밀번호');

이제 root 비밀번호가 정상적으로 변경된 것을 확인할 수 있다.

 

  • 기본 문자 인코딩 utf8mb4로 변경

기본적으로 설치가 되면 utf8 또는 utf8mb4로 설정이 되어있을 것이다.

이를 확인하는 방법은 아래 명령어를 mysql 창에서 입력해서 확인하면 된다.

SHOW VARIABLES LIKE 'c%';

필자는 기본적으로 utf8mb4로 되어있다.

만약 위와 같이 설정되어 있지 않다면 /etc/mysql/mariadb.conf.d/ 폴더 아래 있는 .cnf 파일들의 기본 문자 인코딩을 전부 utf8mb4로 설정하면 된다.

50-client.cnf, 50-mysql-clients.cnf

[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
default-character-set = utf8mb4

50-server.cnf

#
# * Character sets
#
# MySQL/MariaDB default is Latin1, but in Debian we rather default to the full
# utf8 4-byte character set. See also client.cnf
#
character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci

 

  • 백업 및 디버깅을 위한 Log 설정

/etc/mysql/mariadb.conf.d/ 폴더 아래 있는 50-server.cnf에서 설정 가능하다.

#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file       = /var/log/mysql/mysql.log
#general_log            = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#

log_error는 sql 문 실행 중 발생하는 에러의 내용을 저장할 위치이다.

편한 위치로 설정하고, 나중에 에러 발생시 찾아보면 될 것이다.

#
# Enable the slow query log to see queries with especially long duration
#slow_query_log_file    = /var/log/mysql/mariadb-slow.log
#long_query_time        = 10
#log_slow_rate_limit    = 1000
#log_slow_verbosity     = query_plan
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id              = 1
log_bin                = /var/log/mysql/mysql-bin.log
expire_logs_days        = 90
max_binlog_size        = 100M
#binlog_do_db           = include_database_name
#binlog_ignore_db       = exclude_database_name

log_bin은 Binary Log의 저장 위치이다.

expire_logs_days는 해당 로그를 저장할 기간을 말하며, max_binlog_size는 하나의 로그 파일의 최대 크기를 말한다.

Binary Log란 CREATE, ALTER, DROP, INSERT, UPDATE, REMOVE 등과 같이 데이터를 변경하는 쿼리문을 Binary 형식의 로그로 내보낸 것을 말한다.

추후에 발생할 에러나 장애에도 해당 로그를 바탕으로 롤백할 수 있기에 설정을 해두는 것을 추천한다.

db 운영간에 발생한 로그들

 

 

참고 블로그

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

Binary Log를 이용한 MariaDB 롤백  (0) 2022.08.06

+ Recent posts