mariadb数据库误操作的克星-flashback

写在前面

对于数据库而言,误操作是很致命的,并且是很难完全避免的,除了规范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,可以使用更多的开源管理工具。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171215G0R14W00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励