my09_mysql指定时间点恢复之binlog start-position
场景描述
*********************************************
在远程服务器做的全备并已经恢复,同时使用binlog server备份binlog
之后,删除了库中所有表,然后又重建一批表,并插入了大量数据,重建的表与原来的表有重名的表(比如sbtest1)
然后要求恢复删除之前其中一张表sbtest1的数据
恢复思路
************************************************
由于在远程服务器上做了全备,并已经进行了全备的恢复,那么就可以按以下思路进行
1. 从远程服务器备份的binlog中找到删除操作的事务位置之前的一个位置pos
2. 在远程服务器上创建一个只有对表sbtest1有所有权限的用户,用于只恢复sbtest1,从而跳过其他事务;此步非必需。
3. 找到全备的起点,也是恢复的起点(在备份时加master-data参数后,备份文件初始-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS=190;)
恢复准备
**********************************************
全备起点
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000016', MASTER_LOG_POS=190;
原库设置数据
update sbtest3 set pad='扫此二微码,免费领取小礼品' where id=101;
update sbtest2 set pad='扫此二微码,免费领取小礼品' where id=101;
update sbtest1 set pad='扫此二微码,免费领取小礼品' where id=101;
误操作
update sbtest3 set pad='此活动已结束' where id=101;
drop table sbtest3;
确认误操作具体位置
mysqlbinlog --no-defaults --database=txdb -v -v --base64-output=decode-rows --skip-gtids --start-datetime="2018-07-31 16:10:00" --stop-datetime="2018-07-31 16:20:00" mysql-bin.000016> /tmp/3.sql
split -l 100000 3.sql s_
BEGIN
/*!*/;
# at
# :: server id end_log_pos Rows_query
# update sbtest3 set pad='扫此二微码,免费领取小礼品' where id=
# at
# :: server id end_log_pos Table_map: `txdb`.`sbtest3` mapped to number
# at
# :: server id end_log_pos Update_rows: table id flags: STMT_END_F
### UPDATE `txdb`.`sbtest3`
### WHERE
### @= /* INT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=0 is_null=0 */
### @='99505216625-44652318903-87633088031-12891470052-20814553735-53032754476-32543784485-39935334177-82742270613-55767522233' /* STRING(360) meta=61032 nullable=0 is_null=0 */
### @='46607138393-89004745809-36733255854-15721737050-37472852755' /* STRING(180) meta=65204 nullable=0 is_null=0 */
### SET
### @= /* INT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=0 is_null=0 */
### @='99505216625-44652318903-87633088031-12891470052-20814553735-53032754476-32543784485-39935334177-82742270613-55767522233' /* STRING(360) meta=61032 nullable=0 is_null=0 */
### @='扫此二微码,免费领取小礼品' /* STRING(180) meta=65204 nullable=0 is_null=0 */
# at
# :: server id end_log_pos Xid =
COMMIT/*!*/;
# at
# at
# :: server id end_log_pos Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
以上方法在mysql备份与恢复是通用的,一个全备,binlog,恢复的起点与终点。恢复的方法有好几种,下面举例说明几个。
最常用的恢复
**************************************************************
适用于小数据量,即全备的时刻距离故障的时刻产生的binlog量不多,基本上所需要恢复的数据在一个binlog文件中
mysqlbinlog --no-defaults --database=txdb --skip-gtids --start-position=190 --stop-position=888 mysql-bin.000016 > /tmp/rec.sql
注意:stop-position是commit标志前后的这个pos,它们是一样的,在本例中是 end_log_pos 888 与 at 888,它是一个事务的结束点,也是另外一个事务的开始点
确认一下/tmp/rec.sql文件的结尾,是否有删除的操作,确保不会再重复删除
mysql -uautomng -pAutomng_123 -P3319 --database=txdb < /tmp/rec.sql
然后确认数据库,数据已经到预期的时间点上了
mysql> select pad from sbtest3 where id=101;
+-----------------------------------------+
| pad |
+-----------------------------------------+
| 扫此二微码,免费领取小礼品 |
+-----------------------------------------+
1 row in set (0.01 sec)
从恢复机导出该表,然后再导入到误操作的库中
mysqldump -uautomng -pAutomng_123 -P3319 --databases txdb --tables sbtest3 > /tmp/sbtest3.sql
scp /tmp/sbtest3.sql mysql01:/tmp
/tmp/sbtest3.sql中默认已经带上删除表的语句了
DROP TABLE IF EXISTS `sbtest3`;
mysql -uautomng -pAutomng_123 -S /data0/mysql/log/bak/mysql_bak.sock txdb< /tmp/sbtest3.sql
确认误操作数据库是否恢复
mysql> select pad from sbtest3 where id=101;
+-----------------------------------------+
| pad |
+-----------------------------------------+
| 扫此二微码,免费领取小礼品 |
+-----------------------------------------+
1 row in set (0.00 sec)
回顾总结
此例版本mysql5.7.22
不自己操作一遍,永远不知道这里面有多少坑!其他方法后续会补充。
my09_mysql指定时间点恢复之binlog start-position的更多相关文章
- 挖一挖MongoDB的备份与还原(实现指定时间点还原和增量备份还原)
一 研究背景需求 目前作者所在公司的MongoDB数据库是每天凌晨做一次全库完整备份,但数据库出现故障时,只能保证恢复到全备时间点,比如,00:30 做的完整备份,而出现故障是下午18:00,那么现 ...
- 【转】Expire Google Drive Files 让Google Docs云盘共享连接在指定时间后自动失效
最近在清理Google Docs中之前共享过的文件链接,发现Google Docs多人协作共享过的链接会一直存在,在实际操作中较不灵活.正好订阅的RSS推送了Pseric写的这篇文章 - Expire ...
- 在指定时间干,必须干(kbmmw 中的事件调度)
从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件, ...
- SQL Server 获取最后一天(指定时间的月最后一天日期)
/* author OceanHo @ 2015-10-23 10:14:21 获取指定时间字符串指定日期的月最后一天日期 */ IF OBJECT_ID('get_LastDayDate') IS ...
- C#使用Timer.Interval指定时间间隔与指定时间执行事件
C#中,Timer是一个定时器,它可以按照指定的时间间隔或者指定的时间执行一个事件. 指定时间间隔是指按特定的时间间隔,如每1分钟.每10分钟.每1个小时等执行指定事件: 指定时间是指每小时的第30分 ...
- Android判断当前系统时间是否在指定时间的范围内(免消息打扰)
/** * 判断当前系统时间是否在指定时间的范围内 * * @param beginHour * 开始小时,例如22 * @param beginMin * 开始小时的分钟数,例如30 * @para ...
- sql语句延时执行或者是指定时间执行
--使用waitfor语句延迟或暂停程序的执行 --waitfor{delay'time'|time 'time'} delay是指间隔时间 最长到24小时 time是指定时间执行 waitfor d ...
- java获取系统指定时间年月日
java获取系统指定时间年月日 private String setDateTime(String falg) { Calendar c = Calendar.getInstance(); c.set ...
- s实现指定时间自动跳转到某个页面
--js实现指定时间自动跳转到某个页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
随机推荐
- Python 求和函数
#coding=utf-8 ########################### #求1到10,20到30,30到40之和 ########################### sum=0 for ...
- 关于 block的一些浅识
block的定义:“带自动变量的匿名函数” (一)写法: ^ void (int iAge){ NSLog(@"%d", iAge);}; 和C函数写法区别在于: 1) :以插入符 ...
- EZOJ #88
传送门 分析 自然想到二分 我们二分一个长度,之后考虑如何线性判断是否合法 我们可以维护一个单调队列表示从i开始的长度为d的区间和的最大值 每次用一段区间和减去它包含的长度为d的区间最大值即可 但是我 ...
- Luogu 3626 [APIO2009]会议中心
很优美的解法. 推荐大佬博客 如果没有保证字典序最小这一个要求,这题就是一个水题了,但是要保证字典序最小,然后我就不会了…… 如果一条线段能放入一个区间$[l', r']$并且不影响最优答案,那么对于 ...
- html相关标记的含义
HTML标记含义1.<html>...</html> :html 文档标记2.<head>...</head> :文档头标记3.<title> ...
- Java分层概念(转)
Java分层概念(转) 对于分层的概念,似乎之间简单的三层,多了,就有点难以区分了,所以收藏了这个. ervice是业务层 action层即作为控制器 DAO (Data Access Object) ...
- Cactus在jexus上安装
在成功安装完Mono和jexus后(强烈建议Mono 4.2.1以上,jexus 5.6.1 以上,本人测试环境就是Mono 4.2.1和jexus 5.6.1) 第一步: 先配置jexus安装目录下 ...
- Zoey.Dapper--Dapper扩展之把SQL语句放到文件中
介绍 不知道大家在用Dapper的时候SQL语句是写到哪的,目前看网上的例子都是写到类里面的. 此项目的目的是把SQL语句放到文件(xml)中 目前只是初步版本,只是说明了意图,后面会持续完善和优化 ...
- window 启用 windows 自动登录
启用 windows 自动登录 方案一: 1.运行命令:control userpasswords2 2.取掉复选框的钩: 方案二:(方案一无效的时候使用) 微软官网地址:https://suppor ...
- 四步走查智能硬件异常Case
此文已由作者于真真授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 相比于软件,智能硬件产品由于涉及硬件和软件两个端的状态,其异常case要更加错综复杂.由于硬件产品的迭代更新 ...