https://sarc.io/index.php/mariadb/1114-maria-db-flashback
지난 번 위 글에서 살펴보았듯 mariadb 10.2.x 버전부터는 flashback 을 지원합니다.
그러나 mysql 은 8.0 버전이 되어서도 아직 flashback 기능을 지원하지 않고 있는데
이번 글에서 mysql 에서도 mariadb 의 flashback 을 사용하는 방법을 소개드리겠습니다. ( mysql version 5.7이상부터 가능 , 5.6이하로는 안됨)
-1. mysql 5.7 version 의 mysqlbinlog 확인
root@3f8a5a300f38:/# mysqlbinlog --version mysqlbinlog Ver 3.4 for Linux at x86_64 root@3f8a5a300f38:/# mysqlbinlog | grep flashback root@3f8a5a300f38:/#
=> 5.7 version 의 mysqlbinlog 에는 flashback 기능이 없음
-2. mariadb의 mysqlbinlog 로 교체
dori:dockers mac$ docker cp mysqlbinlog 3f:/usr/bin/mysqlbinlog dori:dockers mac$ docker exec -it 3f /bin/bash root@3f8a5a300f38:/# mysqlbinlog --version mysqlbinlog Ver 3.4 for Linux at x86_64 root@3f8a5a300f38:/# mysqlbinlog | grep flashback -B, --flashback Flashback feature can rollback you committed data to a flashback FALSE root@3f8a5a300f38:/#
=> 미리 준비한 mariadb 10.2.x 버전의 mysqlbinlog 를 mysql의 mysqlbinlog 와 교체함
flashback 기능 확인
-3. Flashback TEST
mysql> insert into test.test value(1); Query OK, 1 row affected (0.01 sec) mysql> insert into test.test value(2); Query OK, 1 row affected (0.01 sec) mysql> insert into test.test value(3); Query OK, 1 row affected (0.01 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> update test.test set num=1000; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> select * from test.test; +------+ | num | +------+ | 1000 | | 1000 | | 1000 | +------+ 3 rows in set (0.00 sec)
#190703 12:07:37 server id 1 end_log_pos 123 CRC32 0x89bdd996 Start: binlog v 4, server v 5.7.22-log created 190703 12:07:37 at startup #190703 12:14:49 server id 1 end_log_pos 1413 CRC32 0xfebef829 Table_map: `test`.`test` mapped to number 108 ### UPDATE `test`.`test` ### WHERE ### @1=1000 /* INT meta=0 nullable=1 is_null=0 */ ### SET ### @1=3 /* INT meta=0 nullable=1 is_null=0 */ ### UPDATE `test`.`test` ### WHERE ### @1=1000 /* INT meta=0 nullable=1 is_null=0 */ ### SET ### @1=2 /* INT meta=0 nullable=1 is_null=0 */ ### UPDATE `test`.`test` ### WHERE ### @1=1000 /* INT meta=0 nullable=1 is_null=0 */ ### SET ### @1=1 /* INT meta=0 nullable=1 is_null=0 */ COMMIT
root@3f8a5a300f38:/var/lib/mysql# mysql -uroot -p < test.sql Enter password: root@3f8a5a300f38:/var/lib/mysql# mysql -uroot -p -e"select * from test.test" Enter password: +------+ | num | +------+ | 3 | | 2 | | 1 | +------+ root@3750e4c8fcb0:/var/lib/mysql#
=> flashback 성공 확인
* 5.7,8.0 버전에서는 mariadb의 mysqlbinlog 로 교체 후 flashback 이 성공하나 5.6이하 버전에서는 교체한 mysqlbinlog 자체가 정상적으로 동작하지 않았음