写在前面
对于数据库而言,误操作是很致命的,并且是很难完全避免的,除了规范DBA操作之外,还需要一个非常好用的快速闪回工具处理误操作问题。之前有同行发表过类似文章,介绍了诸如binlog2sql和姜承尧开发的增强版mysqlbinlog工具,今天我们介绍一下mariadb官方提供的mysqlbinlog工具的flashback功能,以供大家根据自身情况选择合适的闪回方案。。
flashback介绍
首先,说明一点,mariadb从10.2.4开始支持flashback功能,笔者测试使用的mariadb版本是10.2.11,这是目前最新稳定版本,该版本是通过mysqlbinlog工具增加了flashback功能,支持单库、单表的DML闪回,不支持DDL闪回。
mariadb提供的mysqlbinlog提供了如下特有的参数:
-B,--flashback Flashback feature canrollback you committed data to a
special time point.
-T,--table=name List entries for justthis table (local log only).
其他参数和普通的mysqlbinlog一样
对于DML闪回,包括update、delete和insert操作,以下分三种场景测试:
(注:这里不区分操作类型)
(1)单库闪回
假设测试库dbatest包括2个表,t1和mtest1
闪回前:
MariaDB [dbatest]> delete from t1;
Query OK, 1 row affected (0.00 sec)
MariaDB [dbatest]> delete from mtest1;
Query OK, 3 rows affected (0.00 sec)
闪回:
/usr/local/mariadb102/bin/mysqlbinlog -vvv -B -d dbatest --start-datetime='2017-12-14 17:4
6:09' 3930-binlog.000003 > flashback3.sql
说明:考虑到测试,这里没有设置停止时间点,实际上mysqlbinlog提供了--start-datetime,--stop-datetime,--start-position和--stop-position参数。
闪回后:
显然,刚才delete的多个表的数据闪回了。
(2)单表闪回
闪回前:
闪回:
/usr/local/mariadb102/bin/mysqlbinlog -vvv -B -d dbatest -T mtest1 --start-datetime='2017-12
-14 17:46:09' 3930-binlog.000003 > flashback3.sql
闪回后:
可见,单个表的数据闪回了。
(3)单事务部分sql闪回
一个事务包括多个sql,需要恢复其中一个sql操作
测试发现,无法恢复单个事务的一部分,其实,这也符合事务的原子性,要么回滚整个事务,要么整个事务不回滚。
总结
mariadb的mysqlbinlog提供的flashback功能,和姜承尧开发的类似只是参数不多,使用也比较简单。个人认为,可以考虑使用mariadb替代官方版mysql,可以使用更多的开源管理工具。
领取专属 10元无门槛券
私享最新 技术干货