前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql binlog恢复数据实战

mysql binlog恢复数据实战

作者头像
仙士可
发布2020-04-22 17:28:37
3.4K0
发布2020-04-22 17:28:37
举报
文章被收录于专栏:仙士可博客仙士可博客

数据库备份

数据库恢复的先决条件是,定时备份数据库,缩小binlog恢复范围.首先我们备份测试数据库数据:

代码语言:javascript
复制
mysqldump -uroot -p --database test > testBackSql.sql

假定它为最后一次备份数据.

test数据库,test数据表最后一个id为164

仙士可博客
仙士可博客

新增测试数据

通过mysql存储过程,写入测试新的测试数据

代码语言:javascript
复制
BEGIN
DECLARE num INT;
SET num=1;
WHILE 1 DO
	INSERT INTO `test`(`name`, `age`, `sex`)
VALUES
	(
		CONCAT('name:', num),
		FLOOR(1 +(RAND() * 40)),
		1
	);
SET num = num + 1;
SELECT SLEEP(0.01);

END WHILE;

END

插入一段时间后,直接删除整个数据库,最后id为367 :

仙士可博客
仙士可博客

数据恢复

在上面的操作中,我们备份了数据为164 id之前的所有数据,插入数据到了367之后被删库.假设我们并不知道id到了367.开始使用binlog分析日志:

首先使用 flush logs; 命令刷新二进制日志

代码语言:javascript
复制
flush logs;

刷新二进制的目的为:确保在刷新日志之前的binlog都为正常数据操作(程序正常更改).

刷新后,新的binlog用于做恢复数据时的记录,

因为当执行备份文件恢复数据和binlog恢复时,都会产生新的binlog,不要和原来的数据进行冲突.  

获取binlog日志列表

代码语言:javascript
复制
mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |     77183 |
| mysql-bin.000002 |       120 |
+------------------+-----------+
2 rows in set (0.00 sec)

mysql>

分析各个日志区间

查询000001日志

代码语言:javascript
复制
 /www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000001  |more
仙士可博客
仙士可博客

查询000002日志

代码语言:javascript
复制
 /www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000002  |more
仙士可博客
仙士可博客

很明显,000002没有删库的那条记录,那么代表备份到删库这段时间的binlog日志都存在000001

通过此开始时间,可以判断出,000001  binlog记录了备份后的所有数据.(如果涉及多个binlog,需要执行多个binlog恢复日志)

通过查询binlog,获取到最后恢复点:

代码语言:javascript
复制
 /www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000001  |tail -50
仙士可博客
仙士可博客

将原有备份数据恢复:

代码语言:javascript
复制
 cat testBackSql.sql |mysql -uroot -p
仙士可博客
仙士可博客

备份数据已经恢复了,开始恢复二进制数据.

代码语言:javascript
复制
/www/server/mysql/bin/mysqlbinlog --stop-position=77066 /www/server/data/mysql-bin.000001| mysql -uroot -p
仙士可博客
仙士可博客

mysql数据恢复成功.

其他

由于时间限制,关于恢复数据中,需要获取到初始恢复位置(也就是备份数据之后的那个位置,可通过--start-datetime=datetime 参数进行定位)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新增测试数据
  • 数据恢复
    • 首先使用 flush logs; 命令刷新二进制日志
      • 获取binlog日志列表
        • 分析各个日志区间
          • 查询000001日志
          • 查询000002日志
        • 通过查询binlog,获取到最后恢复点:
          • mysql数据恢复成功.
          • 其他
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档