使用binlog备份恢复myqsl数据
使用binlog备份恢复myqsl数据
- 什么是binlog
- binlog备份数据
- binlog恢复数据
- 读取数据
- 读取数据
- 方法一:使用mysqlbinlog读取binlog日志:
- 方法二:登录服务器,并查看(推荐此种方法)
- a)完全恢复(需要手动vim编辑mysql-bin.000009,将那条drop语句剔除掉)
- b)指定pos结束点恢复(部分恢复):
什么是binlog
MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL(create alter drop)和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
DDL
- Data Definition Language 数据库定义语言
主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。
DML
- Data Manipulation Language 数据操纵语言
主要的命令是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
mysqlbinlog常见的选项有以下几个:
- –start-datetime:从二进制日志中读取指定等于时间戳或者晚于本地服务器的时间
- –stop-datetime:从二进制日志中读取指定小于时间戳或者等于本地服务器的时间 取值和上述一样
- –start-position:从二进制日志中读取指定position 事件位置作为开始。
- –stop-position:从二进制日志中读取指定position 事件位置作为事件截至
binlog日志包括两类文件
1)二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件
2)二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。
binlog备份数据
将anquan数据库备份到/tmp/anquan_$(date +‘%Y-%m-%d’ ).sql.gz文件中:
mysqldump -uroot -proot -B -F -x --master-data=2 anquan | gzip > /tmp/anquan_$(date +'%Y-%m-%d' ).sql.gz
参数说明:.sq
-B:指定数据库
-F:刷新日志
-R:备份存储过程等
-x:锁表
–master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息
进入tmp目录下查看备份的数据
进入 /var/lib/mysql目录下查看,每备份一次就会产生一个mysql-bin文件
进入数据库通过show master status
命令查看已覆盖最新的bin文件
binlog恢复数据
以图中数据库数据表为例
先对member表中插入一个元素
insert into member values(4,'litaibai',18,'jinyesi');
再将id2的name修改为sudongpo
update member set name='sudongpo' where id=2;
修改结果如下
假设将数据库删除了
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dklh5aau-1658036630069)(C:\Users\17874\AppData\Roaming\Typora\typora-user-images\image-20220716135538074.png)](https://img-blog.csdnimg.cn/24337b1aea8e4c8b926b5f478456b57b.png)
先进 /var/lib/mysql/将最新一次的备份文件复制一份,在执行一次刷新日志索引操作,重新开始新的binlog日志记录文件,这个文件不会再有后续写入了,因为便于我们分析原因及查找ops节点,以后所有数据库操作都会写入到下一个日志文件。
[root@vm-002 ~]# cd /var/lib/mysql/
[root@vm-002 mysql]# cp -v mysql-bin.000009 /tmp/
'mysql-bin.000009' -> '/tmp/mysql-bin.000009'
[root@vm-002 mysql]# ls -al /tmp
mysql-bin.000009
在进入mysql中刷新一次数据
mysql > flush logs;
读取数据
读取数据
进入tmp目录下
cd /tmp
解压备份文件
gzip -d anquan_2022-07-16.sql.gz
导入备份文件
mysql -uroot -proot < anquan_2022-07-16.sql.gz
读取数据有两种方法
方法一:使用mysqlbinlog读取binlog日志:
[root@vm-002 ~]# cd /var/lib/mysql/
[root@vm-002 mysql]# mysqlbinlog mysql-bin.000009
发现只恢复到之前未更新数据的状态的,所以更详细的恢复数据推荐第二种方法。
方法二:登录服务器,并查看(推荐此种方法)
mysql> show binlog events in 'mysql-bin.000003';
通过分析,造成数据库破坏的pos点区间是介于 896–943 之间(这是按照日志区间的pos节点算的),只要恢复到896前就可。
从binlog日志恢复数据
恢复命令的语法格式:
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
--------------------------------------------------------
常用参数选项解释:
–start-position=875 起始pos点
–stop-position=954 结束pos点
–start-datetime=“2016-9-25 22:01:08” 起始时间点
–stop-datetime=“2019-9-25 22:09:46” 结束时间点
–database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)
--------------------------------------------------------
不常用选项:
-u --user=name 连接到远程主机的用户名
-p --password[=name] 连接到远程主机的密码
-h --host=name 从远程主机上获取binlog日志
–read-from-remote-server 从某个MySQL服务器上读取binlog日志
--------------------------------------------------------
小结:实际是将读出的binlog日志内容,通过管道符传递给mysql命令。这些命令、文件尽量写成绝对路径;
a)完全恢复(需要手动vim编辑mysql-bin.000009,将那条drop语句剔除掉)
[root@vm-002 backup]# cp /var/lib/mysql/mysql-bin.000009 /tmp
[root@vm-002 backup]# mysqlbinlog mysql-bin.000009 > 000009.sql
[root@vm-002 backup]# vim 000009.sql #删除里面的drop语句
[root@vm-002 backup]# mysql -uroot -p -v < 000009.sql
温馨提示:
在恢复全备数据之前必须将该binlog文件移出,否则恢复过程中,会继续写入语句到binlog,最终导致增量恢复数据部分变得比较混乱!
可参考:https://www.cnblogs.com/kevingrace/p/5904800.html
发现数据找回
b)指定pos结束点恢复(部分恢复):
–stop-position=471 pos结束节点(按照事务区间算,是471)
注意:
此pos结束节点介于“member表原始数据”与更新“name=‘李四’”之前的数据,这样就可以恢复到更改插入litaibai之前的数据了。
操作如下:
[root@vm-002 ~]# mysqlbinlog --start-position=427 --stop-position=548 --database=anquan /var/lib/mysql/mysql-bin.000009 | mysql -uroot -proot -v
mysqlbinlog --start-position=621 --stop-position=734 --database=anquan /var/lib/mysql/mysql-bin.000009 | mysql -uroot -proot -v
使用binlog备份恢复myqsl数据相关推荐
- TiDB数据库备份恢复与数据迁移
TiDB数据库备份恢复与数据迁移 数据迁移 使用 mydumper/loader 全量导入数据 mydumper/loader 全量导入数据最佳实践 某次导入示例,以及相关的配置 从 MySQL 导出 ...
- 使用MySQL的binlog日志恢复误删数据
使用binlog日志恢复误删数据 1.查看binlog是否开启并锁表 # 进入mysql mysql -uroot -proot#查看binlog是否开启 show variables like '% ...
- 版本管理工具Subversion Edge的备份恢复与数据迁移方案
软件开发生命周期中会使用到多种工具,这些工具的更迭与迁移,备份与恢复都构成了软件开发生命周期的重要部分.这篇文章以当下最新版本的Subversion Edge为例介绍一下其备份恢复与数据迁移方案,因相 ...
- PLSQL Developer备份恢复oracle数据
PLSQL Developer备份恢复oracle数据 使用PL sql提供的功能可以快速的备份恢复oracle数据. 1 导出存储过程,触发器,序列等所有用户对象.(备份) 在PL/SQL Dev ...
- MYSQL专题-使用Binlog日志恢复MySQL数据
大家有没有碰到过由于误操作把测试数据库的一张表给删除了,导致测试的数据都被删除了,然后手足无措,测试把你一定数落,顿时感觉自己要死了?今天就教你即使误删了也可以将删除的数据恢复,以后误删再也不用惊吓了 ...
- mysql binlog 备份恢复数据_Mysql结合备份+binlog恢复误删除操作数据
结合备份+binlog恢复数据. 场景:昨天晚上做了全备,今天上午用户不小心误删除某张表. 解决方案:不建议在原生产环境直接恢复,建议在另一台机器恢复全库+日志,然后导入到生产环境. 1) 创建表se ...
- oracle数据备份 恢复,Oracle数据备份和恢复
Oracle数据库的备份和恢复有很多种方法,是一个很大的话题,足可以写一本书,但是,本文只介绍采用exp和imp进行数据备份和恢复,这也是程序员最常用的方法. 本文涉及的备份与恢复的其它概念都是狭义的 ...
- mysql日志恢复数据_Mysql 通过binlog日志恢复数据
Binlog日志,即binary log,是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即主节点维护一个binlog日志文件,从节点从binlog中同步数据,也可以通过binlog日 ...
- mysql binlog 备份_做好mysql运维,必须熟练掌握备份和恢复,实战一次不行多来几次...
原文:https://www.toutiao.com/i6855460778359816715/ 平台:头条 作者:程序员不就是0和1 一. 备份恢复策略 进行备份或恢复操作时需要考虑一些因素: 1. ...
最新文章
- 一款标注颜色,距离的小软件 markman
- 当sql 没有足够的内存执行程序利用命令执行
- struts2自动接收表单数据
- hdu 5925 搜索
- 实验四——多分支结构及本章总结
- 4种方法帮你解决IntelliJ IDEA控制台中文乱码问题
- php注册树模式,PHP三种基本设计模式(工厂模式、单例模式、注册树模式)
- 德力西双电源自动转换开关说明书_今日优品:南开区FLQ3-25双电源自动转换开关全国服务-老友网...
- App后台开发运维和架构实践学习总结(12)——基于token的多平台身份认证架构设计
- [转贴]What's the Scroll Lock key on my computer for?
- JavaScript:递归实现深拷贝
- k系列服务器,Nvidia开普勒K4000、K2000、K2000D、K600四款Kepler架构Quadro显卡专业卡全新登场...
- mac Python安装pybloomfilter 出现找不到libcrypto的问题
- JAVA VM(HotSpot)
- Window10 开启卓越性能模式
- Clickhouse基础语法、数据类型、数据表引擎学习
- 用Python实现小黑屋游戏
- 写于即将23岁的前端转正前夕
- Dell PowerEdge R750 Intel DAOS 顺利通过“HighPerf Ready 1.0”测试
- 爬虫小项目之爬取赛尔号