-1. Flashback 기능이란

 
인스턴스, 특정 DB, 특정 테이블들을 특정 과거 시점으로 되돌릴 수 있는 기능.
MariaDB 10.2.4 에서 DML only (Insert,Delete,Update) 로 flashback 기능이 추가되었으며 향후에 DDL ( Drop, Truncate, Alter 등) 이 기능도 지원할 예정임
오라클의 flashback이 undo 등이 필요하다면 Ma면iaDB에선 해당 트랜잭션 로그가 있는 binary log가 필수로 있어야함
 

=> 10.2.12 stable version에서도 수행 가능 확인

*주의사항 : Flashback을 수행할 때 Flashback event들은 메모리에 저장되므로 수행 전 충분한 메모리가 있는지 확인해야함
 

-2. 10.2 아래 버전에서 수행 결과 (10.1.24 version)

 

=> mysqlbinlog 명령어가 flashback 관련 명령어를 인지 못함
 
[ip-172-31-13-44:masvc01]/logs001/masvc01/TEST/binary] mysqlbinlog /logs001/masvc01/TEST/binary/mysql-bin.000023 -vv -d test -T test --start-position=1596 --flashback > flashback.sql
mysqlbinlog: unknown option '-T'
[ip-172-31-13-44:masvc01]/logs001/masvc01/TEST/binary] mysqlbinlog flashback
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
mysqlbinlog: File 'flashback' not found (Errcode: 2 "No such file or directory")
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
 
 

-3. Flashback 수행 테스트

 
=> 두 테이블 중 test 테이블만 update 전으로 복구하는 시나리오
 
MariaDB [(none)]> select * from test.test;
+------+
| num  |
+------+
|    2 |
|    2 |
|    2 |
|    1 |
|    1 |
|    1 |
+------+
6 rows in set (0.00 sec)
 
MariaDB [(none)]> select * from test.test2;
+------+
| num  |
+------+
|   20 |
|   20 |
|   20 |
|   10 |
|   10 |
|   10 |
+------+
6 rows in set (0.00 sec)
 
 
 
--- 두 테이블 모두 업데이트
 
 
MariaDB [(none)]> select * from test.test;
+------+
| num  |
+------+
|    5 |
|    5 |
|    5 |
|    5 |
|    5 |
|    5 |
+------+
6 rows in set (0.00 sec)
 
MariaDB [(none)]> select * from test.test2;
+------+
| num  |
+------+
|   30 |
|   30 |
|   30 |
|   30 |
|   30 |
|   30 |
+------+
6 rows in set (0.00 sec)
 
 
--- test 테이블만 flashback 통해 복구
 
위 트랜잭션이 기록 된 binary log 파일에서 복구 시점
start position 과 stop position을 찾은 뒤 아래 커맨드 수행 (OS 커맨드로)
 
[ip-172-31-13-44:masvc01] mysqlbinlog mysql-bin.000003 -vv -d test -T test --start-position=611 --stop-position=2046 --flashback > flashback.sql
 
 
1) -vv : -verbose 와 같은 명령어로 flashback.sql을 이해가능한 형태로 출력
2) -d : 복구 테이블이 속한 db명
3) -T : 복구 테이블
4) --start-position  : 복구 시점 start position
5) --stop-position  : 복구가 종료될 stop position
6) --flashback  : flashback 명령어
 
 
[ip-172-31-13-44:masvc01] mysql -uroot -p -D test <flashback.sql
 
 

-4. 결과 확인

 
=> 두 테이블 중 test 테이블만 복구된 것 확인
 
MariaDB [(none)]> select * from test.test;
+------+
| num  |
+------+
|    2 |
|    2 |
|    2 |
|    1 |
|    1 |
|    1 |
+------+
6 rows in set (0.00 sec)
 
MariaDB [(none)]> select * from test.test2;
+------+
| num  |
+------+
|   30 |
|   30 |
|   30 |
|   30 |
|   30 |
|   30 |
+------+
6 rows in set (0.00 sec)