DataBase/MySQL

[MySQL] bin log를 이용한 복구

효락 2018. 3. 22. 12:22

mysqldump 를 이용하여 전체 백업 복구 후 bin log를 로그 이용하여 나머지 트랜잭션을 복구를 해보자. mysqldump의 자세한 사용 방법은 "[MySQL] mysqldump를 이용한 백업 및 복구" 에서 확인이 가능하다.

mysql> use practice_db;
mysql> select * from test_backup_table;
+------+
| a    |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+

practice_db에 test_backup_table 데이터가 다음과 같다고 하자.

그리고 mysqldump를 이용하여 전체 백업을 받는다. 여기서 중요한 점은 flush_logs 명령을 사용하여 dump를 시작하기전에 bin log를 flush 하자.

shell> mysqldump --single_transaction --databases practice_db --flush_logs -h localhost -u root -p > pratice_db_dump.sql

덤프 후 새로운 데이터를 넣도록 하자.

mysql> insert into test_backup_table(a) values (6),(7);
mysql> select * from test_backup_table;
+------+
| a    |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
|    7 |
+------+

덤프 후 시점에 생성된 bin log가 bin.000004 라고 가정해보자.

복구로 bin log를 사용하기 위해서는 텍스트 형식으로 변환을 해줘야 한다.

shell> mysqlbinlog /var/log/mysql/bin.000004 > binlog4.sql

변환 시 다음과 같은 오류가 난다면 my.cnf 파일에서 'default-character-set=utf8' 를 주석처리 하도록 하자.

mysqlbinlog: unknown variable 'default-character-set=utf8'

my.cnf

[client]
#default-character-set=utf8

이제 복구를 위해서 database가 장애를 통해 사라졌다고 가정하자.

mysql> drop database practice_db;

우선 dump 파일을 이용해 복구를 하고 데이터를 확인한다.

shell> mysql -u root -p < pratice_db_dump.sql
mysql> select * from test_backup_table;
+------+
| a    |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+

그리고 텍스트로 변환한 bin log를 이용하여 복구를 하고 데이터를 확인한다.

shell> mysql -u root -p < binlog4.sql
mysql> select * from test_backup_table;
+------+
| a    |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
|    7 |
+------+