mysqlbinlog限制

该软件利用binlog中记录了操作前的数据镜像和操作后的数据镜像。有如下限制

1)binlog_format=row

2)必须打开binlog

3)只支持insert、update、delete

4)不支持drop 、truncate、alter等ddl语句

特别说明:自带的mysqlbinlog 命令如果没有 -B 参数,则不可用于下面范例。

预备知识:

egrep 参数:

-i :忽略大小写。

-C :后面的数字表示打印符合要求的行以及上下的行。

insert范例

创建测试数据

mysql> create database liangdb character set utf8;

Query OK, 1 row affected (0.01 sec)

mysql> use liangdb;

Database changed

创建测试表并插入数据

mysql> create table t_user_info(id int(20) auto_increment primary key ,name varchar(20));

mysql> insert into t_user_info values(1,'谢广坤'),(2,'赵四'),(3,'刘能'),(4,'王长贵');

mysql> insert into t_user_info values(11,'王大拿'),(12,'王木生'),(13,'谢永强'),(14,'王小蒙');

mysql>  select * from t_user_info;

+----+-----------+

| id | name      |

+----+-----------+

|  1 | 谢广坤 |

|  2 | 赵四    |

|  3 | 刘能    |

|  4 | 王长贵 |

| 11 | 王大拿 |

| 12 | 王木生 |

| 13 | 谢永强 |

| 14 | 王小蒙 |

+----+-----------+

8 rows in set (0.00 sec)

mysql> show master status \G

*************************** 1. row ***************************

File: mysql-bin.000004

Position: 4720

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

现在假设上面的id 11-14 误插入了,现在需要闪回,操作如下:

/opt/mysqlbinlog -vv mysql-bin.000004 |egrep -i -C 20 'insert'

BEGIN

/*!*/;

# at 4491

#170914 14:31:44 server id 3307105  end_log_pos 4551 CRC32 0x1099afaa    Table_map: `liangdb`.`t_user_info` mapped to number 96

# at 4551

#170914 14:31:44 server id 3307105  end_log_pos 4689 CRC32 0x6078cb75   Write_rows: table id 96 flags: STMT_END_F

BINLOG '

UCK6WRNhdjIAPAAAAMcRAAAAAGAAAAAAAAEAB2xpYW5nZGIAC3RfdXNlcl9pbmZvAAIDDwI8AAKq

r5kQ

UCK6WR5hdjIAigAAAFESAAAAAGAAAAAAAAEAAgAC//wLAAAAFMOnxb3igLnDpcKkwqfDpuKAucK/

/AwAAAAUw6fFveKAucOmxZPCqMOn4oCdxbj8DQAAABLDqMKwwqLDpsKwwrjDpcK8wrr8DgAAABXD

p8W94oC5w6XCsMKPw6jigJnihKJ1y3hg

'/*!*/;

### INSERT INTO `liangdb`.`t_user_info`

### SET

###   @1=11 /* INT meta=0 nullable=0 is_null=0 */

###   @2='????¤§???' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

### INSERT INTO `liangdb`.`t_user_info`

### SET

###   @1=12 /* INT meta=0 nullable=0 is_null=0 */

###   @2='?????¨?”?' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

### INSERT INTO `liangdb`.`t_user_info`

### SET

###   @1=13 /* INT meta=0 nullable=0 is_null=0 */

###   @2='è°¢?°???o' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

### INSERT INTO `liangdb`.`t_user_info`

### SET

###   @1=14 /* INT meta=0 nullable=0 is_null=0 */

###   @2='????°è’?' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

# at 4689

#170914 14:31:44 server id 3307105  end_log_pos 4720 CRC32 0xad3890a3   Xid = 4313

COMMIT/*!*/;

在上面的记录中,找到对应insert语句end_log_pos ,找到关键字 BEGIN 往后看的第一个pos(BEGIN后面的 at 4491)和COMMIT往前看的最后一个end_log_pos(end_log_pos 4720)。

在上面中,分别找到开始和结束的end_log_pos 为:

--start-position=4491

--stop-position=4720

执行下述恢复命令:

/opt/mysqlbinlog -B -vv --start-position=4491 --stop-position=4720  mysql-bin.000004 | mysql -uXXXXXXXXX -pXXXXXXXXX -hXXXXXXXXX -PXXXXXXXXX liangdb

登录到数据库查看验证:

mysql> select * from t_user_info;

+----+-----------+

| id | name      |

+----+-----------+

|  1 | 谢广坤 |

|  2 | 赵四    |

|  3 | 刘能    |

|  4 | 王长贵 |

+----+-----------+

4 rows in set (0.00 sec)

至此数据现已恢复。

update范例

mysql> select * from t_user_info;

+----+-----------+

| id | name      |

+----+-----------+

|  1 | 谢广坤 |

|  2 | 赵四    |

|  3 | 刘能    |

|  4 | 王长贵 |

+----+-----------+

4 rows in set (0.00 sec)

mysql> update t_user_info set name='梁国军' where id >=3;

Query OK, 2 rows affected (0.00 sec)

Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from t_user_info;

+----+-----------+

| id | name      |

+----+-----------+

|  1 | 谢广坤 |

|  2 | 赵四    |

|  3 | 梁国军 |

|  4 | 梁国军 |

+----+-----------+

4 rows in set (0.00 sec)

mysql> show master status\G

*************************** 1. row ***************************

File: mysql-bin.000004

Position: 5324

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

查看binlog

/opt/mysqlbinlog -vv mysql-bin.000004 |egrep -i -C 20 'update'

BEGIN

/*!*/;

# at 5099

#170914 15:02:36 server id 3307105  end_log_pos 5159 CRC32 0x6ec97416   Table_map: `liangdb`.`t_user_info` mapped to number 96

# at 5159

#170914 15:02:36 server id 3307105  end_log_pos 5293 CRC32 0xf089ad91    Update_rows: table id 96 flags: STMT_END_F

BINLOG '

jCm6WRNhdjIAPAAAACcUAAAAAGAAAAAAAAEAB2xpYW5nZGIAC3RfdXNlcl9pbmZvAAIDDwI8AAIW

dMlu

jCm6WR9hdjIAhgAAAK0UAAAAAGAAAAAAAAEAAgAC///8AwAAAAzDpcuGy5zDqMaSwr38AwAAABXD

psKiwoHDpeKAusK9w6XigKDigLr8BAAAABTDp8W94oC5w6nigKLCv8OowrTCtfwEAAAAFcOmwqLC

gcOl4oC6wr3DpeKAoOKAupGtifA=

'/*!*/;

### UPDATE `liangdb`.`t_user_info`

### WHERE

###   @1=3 /* INT meta=0 nullable=0 is_null=0 */

###   @2='???è??' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

### SET

###   @1=3 /* INT meta=0 nullable=0 is_null=0 */

###   @2='?¢??????' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

### UPDATE `liangdb`.`t_user_info`

### WHERE

###   @1=4 /* INT meta=0 nullable=0 is_null=0 */

###   @2='???é??è′μ' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

### SET

###   @1=4 /* INT meta=0 nullable=0 is_null=0 */

###   @2='?¢??????' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

# at 5293

#170914 15:02:36 server id 3307105  end_log_pos 5324 CRC32 0x2f825c70    Xid = 4384

COMMIT/*!*/;

恢复

/opt/mysqlbinlog -B -vv --start-position=5099 --stop-position=5324  mysql-bin.000004 | mysql -uXXXXXXXXX -pXXXXXXXXX -hXXXXXXXXX -PXXXXXXXXX liangdb

验证。

mysql> select * from t_user_info;

+----+-----------+

| id | name      |

+----+-----------+

|  1 | 谢广坤 |

|  2 | 赵四    |

|  3 | 刘能    |

|  4 | 王长贵 |

+----+-----------+

4 rows in set (0.00 sec)

至此,已恢复。

delete范例

mysql> select * from t_user_info;

+----+-----------+

| id | name      |

+----+-----------+

|  1 | 谢广坤 |

|  2 | 赵四    |

|  3 | 刘能    |

|  4 | 王长贵 |

+----+-----------+

4 rows in set (0.00 sec)

mysql>  delete from t_user_info   where id >=3;

Query OK, 2 rows affected (0.01 sec)

mysql> select * from t_user_info;

+----+-----------+

| id | name      |

+----+-----------+

|  1 | 谢广坤 |

|  2 | 赵四    |

+----+-----------+

2 rows in set (0.00 sec)

mysql> show master status\G

*************************** 1. row ***************************

File: mysql-bin.000004

Position: 5869

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

查看binlog

/opt/mysqlbinlog -vv mysql-bin.000004 |egrep -i -C 20 'delete'

BEGIN

/*!*/;

# at 5699

#170914 15:08:31 server id 3307105  end_log_pos 5759 CRC32 0x81532552   Table_map: `liangdb`.`t_user_info` mapped to number 96

# at 5759

#170914 15:08:31 server id 3307105  end_log_pos 5838 CRC32 0x8eca6af1    Delete_rows: table id 96 flags: STMT_END_F

BINLOG '

7yq6WRNhdjIAPAAAAH8WAAAAAGAAAAAAAAEAB2xpYW5nZGIAC3RfdXNlcl9pbmZvAAIDDwI8AAJS

JVOB

7yq6WSBhdjIATwAAAM4WAAAAAGAAAAAAAAEAAgAC//wDAAAADMOly4bLnMOoxpLCvfwEAAAAFMOn

xb3igLnDqeKAosK/w6jCtMK18WrKjg==

'/*!*/;

### DELETE FROM `liangdb`.`t_user_info`

### WHERE

###   @1=3 /* INT meta=0 nullable=0 is_null=0 */

###   @2='???è??' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

### DELETE FROM `liangdb`.`t_user_info`

### WHERE

###   @1=4 /* INT meta=0 nullable=0 is_null=0 */

###   @2='???é??è′μ' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

# at 5838

#170914 15:08:31 server id 3307105  end_log_pos 5869 CRC32 0x7ea27b47   Xid = 4402

COMMIT/*!*/;

恢复

/opt/mysqlbinlog -B -vv --start-position=5699 --stop-position=5869  mysql-bin.000004 | mysql -uXXXXXXXXX -pXXXXXXXXX -hXXXXXXXXX -PXXXXXXXXX liangdb

验证。

mysql> select * from t_user_info;

+----+-----------+

| id | name      |

+----+-----------+

|  1 | 谢广坤 |

|  2 | 赵四    |

|  3 | 刘能    |

|  4 | 王长贵 |

+----+-----------+

4 rows in set (0.00 sec)

至此,已恢复。

转载于:https://www.cnblogs.com/liang545621/p/7520841.html

mysqlbinlog flashback 使用最佳实践相关推荐

  1. 编写高性能Java代码的最佳实践

    编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...

  2. 提示和技巧:光线跟踪最佳实践

    提示和技巧:光线跟踪最佳实践 Tips and Tricks: Ray Tracing Best Practices 本文介绍了在游戏和其他实时图形应用程序中实现光线跟踪的最佳实践.我们尽可能简短地介 ...

  3. SQL Server 最佳实践分析器使用小结

    Best Practices Analyzer Tool for Microsoft SQL Server 2000是Microsoft SQL Server开发团队开发的一个数据库管理工具,可以让你 ...

  4. 使用ADO.NET 的最佳实践(zz)

    数据访问:使用 ADO.NET 的最佳实践(ADO.NET 技术文档) 发布日期: 4/1/2004 | 更新日期: 4/1/2004 摘要:编写 Microsoft ADO.NET 代码的最佳实践, ...

  5. 何崚谈阿里巴巴前端性能优化最佳实践

    转载:http://www.infoq.com/cn/interviews/hl-alibaba-front-end-performance-optimization 大家好,我现在在阿里巴巴园区采访 ...

  6. 卡片式设计的最佳实践分享

    2017-02-17 三达不留点gpj CocoaChina 卡片本质上是一个简单的信息容器,信息量有限,但设计干净整洁.现如今,在保证界面具有优秀可用性的同时,卡片式的设计甚至成为了平衡界面美学的默 ...

  7. GMTC 大前端时代前端监控的最佳实践

    摘要: 今天我分享的内容分成三个部分: 第一部分是"大前端时代前端监控新的变化", 讲述这些年来,前端监控一些新的视角以及最前沿的一些思考. 第二部分"前端监控的最佳实践 ...

  8. eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析...

    Guide: eBCC性能分析最佳实践(0) - 开启性能分析新篇章 eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析 eBCC性能分析最佳实践(2) - ...

  9. CODING 最佳实践:快课网研发效能提升之路

    快课企业移动学习平台是上海快微网络科技有限公司自主研发的企业级 SaaS 平台,提供移动学习.考试练习.培训管理.知识分享.统计分析等学习和培训功能,为员工.经销商及客户等全价值链合作伙伴提供全面的知 ...

最新文章

  1. 由1433端口入侵,浅谈sqlserver安全 (转)
  2. c语言循环并行处理,C语言设计并行处理
  3. 合作方变股东:Aurora无人车获现代汽车3千万美元投资,与大众分手
  4. html求和按钮,使用模板标记在html模板中求和
  5. linux下.rar的文件,Linux下.rar压缩文件处理 (RAR 4.11 for linux )
  6. 原创:通过jQuery进行跨域操作
  7. 文本编辑器中替换对话框的设计与实现
  8. OpenCV跟踪支持的实例(附完整源代码)
  9. 腾讯研发专家:TXSQL如何成为云计算时代数据库核弹头?
  10. ThreadLocal http://blog.jobbole.com/20400/
  11. Hexo博客的备份与恢复
  12. std::string与MFC的CString的比较
  13. .NET Core 2.1.12 与 2.2.6 发布,修复 URL 重定向欺骗漏洞
  14. win7桌面计算机图标变了,Win7桌面图标变成未知的文件了怎么办
  15. 利用混合高斯模型实现视频中运动目标与背景的分离
  16. 冯.诺依曼计算机结构要点
  17. 虚拟桌面和云桌面办公系统
  18. 关键字synchronized与volatile详解
  19. 云脉自定义模板识别大大提高资料数据格式化的效率
  20. 201.微信公众号开发【文本消息】

热门文章

  1. HP ProLiant服务器收集日志的方法
  2. 崇拜的Unix大牛,记录之。
  3. VS 2005 Debugger crashing with IE 8
  4. [解题报告]10929 - You can say 11
  5. Nodejs教程14:querystring模块
  6. python学习第一模块练习
  7. 洛谷—— P1605 迷宫
  8. Wdatepicker日期控件的使用指南
  9. 快速清理Android中无用的资源信息,图片,字符串等
  10. 一张图解析如何让img垂直居中对齐