mysql数据恢复时间点(MySQL 基于时间点的快速恢复方案)
mysql数据恢复时间点
MySQL 基于时间点的快速恢复方案之所以有这样一篇文章,是因为在前几天的一个晚上,要下班的时候,业务方忽然有一个需求,是需要恢复一个表里面的数据,当时问了下情况,大概是这样的:业务方不小心在一个表里面做了一个update的操作,可能是where条件没有写对,导致表里面的数据被写坏了,但是数据目前还没有落盘,只是在内存中的值修改了,现在要求恢复到之前的数据。万幸,这份数据是平台上某些商品的价格,基本上是有限个商品,然后价格值也都是固定的,之前有对这个价格表进行备份,于是给他直接重新导入了一份价格表的数据,这个问题也算是解决了。
当时我在想,如果我没有备份,只有binlog,这个时候如果这个问题让我来恢复,那么有什么更好的办法么?新建一个实例,全库还原,然后应用备份的binlog,一直去追,追到数据被该坏的时间点。
使用mysqlbinlog工具重放事务,这种方法会有很多陷阱,比如:
1、只能每次运行一个mysqlbinlog命令,一次对一个binlog文件执行重放,无法并行多命令运行,因为在执行重放的时候会产生一个临时表,会有冲突,造成失败。
2、它是一个原子操作。如果它在运行到半途中间的时候失败,将很难知道它在哪失败,也很难基于先前的时间点重新开始。导致失败的理由会有很多:一些并发事务引起的Innodb lock wait timeout ,server和client设置的max_allowed_packet不同,以及查询过程中失去跟mysql server的连接,等等。
于是翻了翻percona的博客,找到一种方法,看了看精髓,就大概记录了下来,这儿方法我还没有亲自实现,只是记录在这里,以后有时间了可以亲自操作一把,看看是否能够比较高效的解决这个问题。
大体思路如下:
2台额外机器,第1台用于做备份结果数据的恢复,另外1台用于将原主的binlog拷贝至该实例然后模拟原主,然后第一台与第二台建立主从关系,change master to 第二台,位置点位备份结果(xtrabackup_binlog_info中的binlog名和pos),然后同步至误操作点停止,将恢复的表,导出,然后恢复至生产原主。
具体的步骤如下:
1、准备一台机器,用于将该实例的最新备份的结果数据,进行备份还原
2、准备另外一台机器了,新实例,将原master的binlog文件,拷贝至该实例的数据目录下, 启动一个空实例(server-id跟原主一致, --log_bin=master-bin binlog文件名保持跟原主一致;),然后停掉它,删除所有它自动创建的binlogs,解压缩并拷贝所有需要的binlogs(来自于原生产实例)到它的数据目录下,然后重新启动它。
最新备份数据的位置:
如果启动正常,则连接mysql,查看binlog相关信息:
3、建立同步关系,并同步到误操作动作的位置前停止
|
CHANGE MASTER TO MASTER_HOST= '127.0.0.1' , MASTER_PORT=3307, MASTER_USER= 'root' , MASTER_PASSWORD= 'secret' , MASTER_LOG_FILE= 'master-bin.000007' , MASTER_LOG_POS=1518932; START SLAVE UNTIL MASTER_LOG_FILE = 'log_name' , MASTER_LOG_POS = log_pos |
或者
|
START SLAVE SQL_THREAD UNTIL SQL_AFTER_GTIDS = 3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56 SHOW SLAVE STATUSG; |
相当于多用了一台实例,提高二进制日志的利用速率,提高二进制日志的利用的成功率。这个方法是否可行,还有待验证,按照文章中作者讲述的思想来看,是比单实例应用binlog的方法好,因为一旦发生了应用binlog过程中的错误,它能够快速确定实在那个点位发生的错误,有助于我们快速解决问题。
以上就是MySQL 基于时间点的快速恢复方案的详细内容,更多关于MySQL 快速恢复的资料请关注开心学习网其它相关文章!
原文链接:https://cloud.tencent.com/developer/article/1533741
- mysql更新数据库表中的数据语法(Mysql联表update数据的示例详解)
- mariadb导入数据库命令(MySQL/MariaDB 如何实现数据透视表的示例代码)
- mysql复合索引会包含哪些索引(MySQL查询冗余索引和未使用过的索引操作)
- mysql 排序源码(MySQL排序原理和案例详析)
- mysql5.7.20非安装版教程(MySQL5.5 部署的一个问题)
- linux安装nacos教程(Nacos配置MySQL8的方法)
- 查看mysql执行计划关键字(带你学习MySQL执行计划)
- mysql有什么索引(MySQL 普通索引和唯一索引的区别详解)
- mysqlcount使用技巧(MySQL巧用sum、case和when优化统计查询)
- Mysql官方性能测试工具mysqlslap的使用简介(Mysql官方性能测试工具mysqlslap的使用简介)
- mysql索引的类型和方法(MySQL覆盖索引的使用示例)
- mysql密码找回方法(MySQL8忘记密码的快速解决方法)
- mysql查询count很慢(MySQL COUNT函数的使用与优化)
- mysql改root密码命令(MySQL root密码的重置方法)
- mysql索引为什么是b+树(mysql 使用B+树索引有哪些优势)
- mysql 高效分页(MySQL 分页查询的优化技巧)
- 硕博期刊 SCI SSCI CSSCI分不清 一文带你看懂主流期刊分类(硕博期刊SCISSCI)
- 辱华品牌新百伦官宣新代言人IU,个别粉丝希望get爱豆同款(辱华品牌新百伦官宣新代言人IU)
- 巅峰时期被爆床照,曾被选国民最讨厌女星,IU不为人知的黑历史(巅峰时期被爆床照)
- 每天1万吨牛奶倒进下水道,美国大萧条一幕重现(每天1万吨牛奶倒进下水道)
- 如何看待美国数十万加仑牛奶倒下水道 历史又重演了(如何看待美国数十万加仑牛奶倒下水道)
- 历史惊人的相似,美国80万加仑牛奶倒入下水道,意味着什么(历史惊人的相似)
热门推荐
- iframe解决跨域问题(跨域修改iframe页面内容详解)
- mysql游标的使用(MySQL 游标的作用与使用相关)
- javascript怎么编写游戏(javaScript实现网页版的弹球游戏)
- mysql如何定义外键(MySQL外键设置的方法实例)
- axios并发请求数据(项目中如何使用axios过滤多次重复请求详解)
- pjs计算方式(JS代码编译器Monaco使用方法)
- vue滑动切换页面(vue实现点击翻转效果)
- python代码如何进行切片索引(Python读取Pickle文件信息并计算与当前时间间隔的方法分析)
- pythonbug生成图片(python实现海螺图片的方法示例)
- 腾讯云服务器配置详解(腾讯云服务器安全组配置图文教程)