본문 바로가기
다른 DBMS/MySQL&MariaDB

binlog를 이용한 백업&복구

by 취미툰 2020. 12. 25.
반응형

Binlog를 사용하여 백업&복구에 사용할 수 있습니다.

시점복구(PIT)가 가능합니다.

즉, 특정 시점의 binlog파일을 이용하여 특정시점이후의 데이터가 복구가 가능하다는 것입니다.

이론적으로, mysqldump파일과 binlog파일을 활용하면 완전복구가 가능할 것입니다.

 

오늘 테스트는 두개의 파일을 활용하여 백업 복구를 수행하는 테스트를 진행하겠습니다.

 

-----------------------------------------------------

Mysql version : 8.0.22

OS : Red Hat Enterprise Linux Server release 7.6

------------------------------------------------------

 

 

장애상황 : db_test 스키마에 테이블을 생성 후 데이터를 삽입 후 mysqldump로 백업하기. 그 후 데이터를 다시 삽입하여 binlog로 백업한 후 완전복구하기

 

binlog는 그냥 파일을 열면 바이너리이기 때문에 알수 없는 문자로 나옵니다. 따라서 mysqlbinlog 프로그램을 이용해서 파일을 열어야 합니다.

 

형식은 아래와 같습니다.

mysqlbinlog [BINLOG명] > [백업스크립트.sql]

 

 

1.테스트 테이블 생성

mysql> use db_test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> create table binlogtest (name varchar(10));
Query OK, 0 rows affected (0.02 sec)

mysql>
mysql> show tables;
+-------------------+
| Tables_in_db_test |
+-------------------+
| binlogtest        |
+-------------------+
1 row in set (0.00 sec)


2.데이터 삽입

insert into binlogtest values ('1');
insert into binlogtest values ('2');
insert into binlogtest values ('3');
insert into binlogtest values ('4');
insert into binlogtest values ('5');
insert into binlogtest values ('6');

mysql> select * from binlogtest;
+------+
| name |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 6    |
+------+
6 rows in set (0.00 sec)


3.mysqldump를 이용한 백업

# mysqldump --single_transaction --databases db_test --flush_logs -u root -p > db_test_dump.sql

Enter password:
[root@ysbae 201222]# ls -al
total 4
drwxr-xr-x 2 root root   30 Dec 21 21:22 .
drwxr-xr-x 4 root root   57 Dec 21 21:20 ..
-rw-r--r-- 1 root root 2049 Dec 21 21:22 db_test_dump.sql


4.데이터 추가삽입
mysql> insert into binlogtest values ('7'),('8'),('9'),('10');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql>
mysql> select * From binlogtest;
+------+
| name |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 6    |
| 7    |
| 8    |
| 9    |
| 10   |
+------+
10 rows in set (0.00 sec)


5.binlog 백업
# mysqlbinlog  ON.000010 > /root/mysql_dir/201222/binlog.sql



6.삭제(장애상황 발생)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| classicmodels      |
| db_test            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
7 rows in set (0.00 sec)

mysql> drop database db_test;
Query OK, 1 row affected (0.02 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| classicmodels      |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)


7.mysqldump를 이용한 스키마 복구
# mysql -u root -p < db_test_dump.sql
Enter password:


8.확인
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| classicmodels      |
| db_test            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
7 rows in set (0.00 sec)

mysql> select * from db_test.binlogtest;
+------+
| name |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 6    |
+------+
6 rows in set (0.00 sec)


9.binlog를 이용한 시점복구
# mysql -u root -p < binlog.sql
Enter password:


10.확인
mysql> select * from db_test.binlogtest;
+------+
| name |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 6    |
| 7    |
| 8    |
| 9    |
| 10   |
+------+
10 rows in set (0.00 sec)

완료.

 

기본적인 binlog 백업&복구 테스트를 수행해보았습니다.

결과를 보면 알겠지만 6까지는 myslqdump로 복구를 수행하였습니다. 원래 데이터는 10까지 였기 때문에 이상태까지만 보면 완전복구가 아닙니다. 여기서 binlog를 이용하여 나머지 데이터를 복구하여 삭제전까지 있었던 10까지의 데이터를 복구 완료 했습니다.

 

다음번에는 다른 상황을 두고 binlog 백업&복구 테스트를 수행하겠습니다.

 

참고 : h391106.tistory.com/237

 

반응형

'다른 DBMS > MySQL&MariaDB' 카테고리의 다른 글

mysqlbinlog 명령어 옵션  (0) 2020.12.27
mysql 명령어 옵션  (0) 2020.12.26
AUTOCOMMIT 확인방법  (0) 2020.12.24
Mysqldump를 이용한 백업&복구  (0) 2020.12.23
binlog(Binary log)  (0) 2020.12.15

댓글