mysqlbinlog flashback 使用最佳实践
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 使用最佳实践相关推荐
- 编写高性能Java代码的最佳实践
编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...
- 提示和技巧:光线跟踪最佳实践
提示和技巧:光线跟踪最佳实践 Tips and Tricks: Ray Tracing Best Practices 本文介绍了在游戏和其他实时图形应用程序中实现光线跟踪的最佳实践.我们尽可能简短地介 ...
- SQL Server 最佳实践分析器使用小结
Best Practices Analyzer Tool for Microsoft SQL Server 2000是Microsoft SQL Server开发团队开发的一个数据库管理工具,可以让你 ...
- 使用ADO.NET 的最佳实践(zz)
数据访问:使用 ADO.NET 的最佳实践(ADO.NET 技术文档) 发布日期: 4/1/2004 | 更新日期: 4/1/2004 摘要:编写 Microsoft ADO.NET 代码的最佳实践, ...
- 何崚谈阿里巴巴前端性能优化最佳实践
转载:http://www.infoq.com/cn/interviews/hl-alibaba-front-end-performance-optimization 大家好,我现在在阿里巴巴园区采访 ...
- 卡片式设计的最佳实践分享
2017-02-17 三达不留点gpj CocoaChina 卡片本质上是一个简单的信息容器,信息量有限,但设计干净整洁.现如今,在保证界面具有优秀可用性的同时,卡片式的设计甚至成为了平衡界面美学的默 ...
- GMTC 大前端时代前端监控的最佳实践
摘要: 今天我分享的内容分成三个部分: 第一部分是"大前端时代前端监控新的变化", 讲述这些年来,前端监控一些新的视角以及最前沿的一些思考. 第二部分"前端监控的最佳实践 ...
- eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析...
Guide: eBCC性能分析最佳实践(0) - 开启性能分析新篇章 eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析 eBCC性能分析最佳实践(2) - ...
- CODING 最佳实践:快课网研发效能提升之路
快课企业移动学习平台是上海快微网络科技有限公司自主研发的企业级 SaaS 平台,提供移动学习.考试练习.培训管理.知识分享.统计分析等学习和培训功能,为员工.经销商及客户等全价值链合作伙伴提供全面的知 ...
最新文章
- 由1433端口入侵,浅谈sqlserver安全 (转)
- c语言循环并行处理,C语言设计并行处理
- 合作方变股东:Aurora无人车获现代汽车3千万美元投资,与大众分手
- html求和按钮,使用模板标记在html模板中求和
- linux下.rar的文件,Linux下.rar压缩文件处理 (RAR 4.11 for linux )
- 原创:通过jQuery进行跨域操作
- 文本编辑器中替换对话框的设计与实现
- OpenCV跟踪支持的实例(附完整源代码)
- 腾讯研发专家:TXSQL如何成为云计算时代数据库核弹头?
- ThreadLocal http://blog.jobbole.com/20400/
- Hexo博客的备份与恢复
- std::string与MFC的CString的比较
- .NET Core 2.1.12 与 2.2.6 发布,修复 URL 重定向欺骗漏洞
- win7桌面计算机图标变了,Win7桌面图标变成未知的文件了怎么办
- 利用混合高斯模型实现视频中运动目标与背景的分离
- 冯.诺依曼计算机结构要点
- 虚拟桌面和云桌面办公系统
- 关键字synchronized与volatile详解
- 云脉自定义模板识别大大提高资料数据格式化的效率
- 201.微信公众号开发【文本消息】