MySQL 数据恢复

前言

前两天因为没注意的误操作, 直接把某个数据表清掉了, 心慌慌. 怪自己学艺不精, 当时整了一下午也没把数据找回来. 当晚回来闭关研究, 终于在凌晨1点多整出来了, 特此记录, 以备不时之需.

对于 MySQL 数据的备份, 主要有两种: 全量备份和增量备份.

  • 全量备份: 将数据库中的所有数据全部进行备份. 相当于复制粘贴的步骤. 全量备份要保存所有数据, 占用空间大, 必然不可能精确到每一秒.
  • 增量备份: 对数据库的所有变动进行备份. 增量备份可以将数据库的变动全部保存下来, 但也不可能一直保存, 否则备份文件的体积超级大.

而对数据库数据的恢复操作, 思路也很简单, 使用全量备份和增量备份相配合, 以某个时间点的全量备份为基础, 通过增量备份使数据库数据恢复到具体的某个时间节点.

为了防止下次遇到这种情况再抓狂, 我决定对数据库进行定时备份. 通过全量和增量的备份文件来面对下一次事故的发生(当然, 我是肯定不会再出现了, 防止之后其他人误操作吧)

数据的备份操作基本如下:

  1. 每天对数据库进行全量备份
  2. 保持 binlog 的增量备份

当需要恢复时, 找到当天的全量备份数据恢复, 然后在这基础上进行增量恢复即可恢复到某个特定的时间点. 好, 开搞.

定时全量备份

思路很简单, 通过mysqldump命令进行全量备份, 一个简单的定时 shell 脚本即可满足. 脚本如下:

#!/bin/bash
# 备份文件保留天数
FileRetainDay=30
# 备份目录
BakDir=/Users/hujing/dir/tmp/mysqldump_log
# 数据库用户名
User=root
# 数据库密码
Password=root
# 今天的日期
Date=`date +%Y-%m-%d`
cd $BakDir
mysqldump -u$User -p$Password --quick --all-databases --flush-logs > $Date.sql
# --quit: 不使用缓存
# --flush-logs: 刷新数据库的 logbin 文件
# --all-databases: 备份所有数据库
# 删除30天前的备份文件
find $BakDir -mtime +$FileRetainDay -type f -name "*.sql" | xargs rm

脚本很简单. 接下来通过crontab定时每天跑一次:

1 0 * * * bash /Users/hujing/dir/tmp/mysql_back.sh

每天的12点1分跑一次. 这样30天以内的数据备份文件就有了.

增量备份

全量备份搞定了, 剩下增量备份. 增量备份就是 mysql 的binlog了.

以下几个 MySQL 的命令行查询命令可查看当前binlog状态:

  • show binary logs 查看当前存在的 log 文件
  • show variables like '%log_bin%' 查看 binlog 是否开启及文件位置
  • show master status 查看当前使用的 binlog
  • show binlog events in 'binlog.000001' 查看日志文件内容

binlog相关配置:

# 开启 binlog
log_bin=ON
# binlog 日志文件前缀
log_bin_basename=/var/lib/mysql/binlog
# 索引文件
log_bin_index=/var/lib/mysql/binlog.index
# 文件过期时间, 过期文件会自动删除
expire_logs_days=7
# 每个文件的最大保存大小
max_binlog_size=1024M

很好, 现在我们也有了增量备份文件.

数据恢复

当需要恢复数据时, 如何根据这两个备份文件进行恢复呢?

打个比方, 当前时间是: 2020-9-4 23:00:00. 此时, 我做了清表的疯狂操作. 如何恢复数据?

1. 通过全量备份, 将数据恢复到今天凌晨的时刻

进入 MySQL命令行, 执行数据恢复文件:

source /Users/hujing/dir/tmp/mysqldump_log/2020-09-04.sql

此时, 数据库已经恢复到本日凌晨的时刻. 请注意, 这步操作会将今日生成的数据删除.

2. 通过增量备份, 将数据恢复到指定时间节点

通过mysqlbin工具, 将指定时间的数据库变更操作导出:

mysqlbinlog -v --start-datetime="2020-09-04 00:00:00" --stop-datetime="2020-09-04 23:00:00" /var/lib/mysql/binlog.0000* > s.sql

同样通过source命令执行此sql文件. 此时, 数据就已经恢复了.


肤浅的记录一下, 虽然现在可以恢复数据了, 但是还有很多问题没有解决, 比如, 如何只恢复一张表的数据等等.

吃一堑长一智, 之后对数据库的操作要慎之又慎.

MySQL 数据恢复相关推荐

  1. 天堂2启动mysql就没了_启用二进制日志文件进行mysql数据恢复

    启用二进制日志文件进行mysql数据恢复 查看文件/etc/my.cnf中[mysqld]配置块的是否配置log-bin 项,用来记录数据库更改的日志, 然后设置要需要写入日志的数据库或者不要写入日志 ...

  2. mysqldump全量恢复_删库不跑路-详解MySQL数据恢复

    日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么,如果连数据都恢复不了,还要什么 DBA. 相关文章 MySQL备份策略:https://segmentfa ...

  3. linux mysql恢复数据_删库不跑路详解MySQL数据恢复

    作者:程淇铭 出处:https://segmentfault.com/a/1190000020116271 日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么 ...

  4. 事物日志恢复 mysql_一种基于事务日志的Mysql数据恢复方法与流程

    本发明涉及一种mysql数据恢复方法,尤其涉及一种基于事务日志的mysql数据恢复方法. 背景技术: :在对mysql数据库进行日常操作的过程中,总是无法避免会产生各种误删数据,误改数据等操作.这个时 ...

  5. github mysql 数据恢复_记一次MySQL删库的数据恢复

    昨天因为不可描述的原因,数据库直接被 drop database删除.在第一时间停止数据库服务和Web服务,备份MySQL数据目录下的所有文件之后,开始走上数据恢复之路. 第一次干这种事,各种不得法. ...

  6. mysql基于.frm和.ibd进行mysql数据恢复

    1.场景 数据库的.frm和.idb的文件进行数据恢复 2.找到mysql的数据目录 最终恢复成的数据如下: 3.恢复前置:在新安装的mysql目下执行以下操作 将/opt/mysql目录下的数据文件 ...

  7. 删库不跑路,详解MySQL数据恢复

    日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生.那么,如果连数据都恢复不了,还要什么 DBA >>>> 1 前言 数据恢复的前提的做好备 ...

  8. 那天删库跑路后,在牢里写的MySQL数据恢复大法……

    日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生.那么,如果连数据都恢复不了,还要什么 DBA. 一.前言 数据恢复的前提的做好备份,且开启 binlog,格式为 ...

  9. mysql 数据恢复 报错_Mysql 数据恢复报错

    1.测试mysql binlog 数据恢复功能,我的mysql版本是5.7.17 2.删了数据之后,执行show binlog events 命令得到如下记录 3.找到开始删除和结束删除的位置,然后执 ...

最新文章

  1. IDEA中Maven项目使用Junit4单元测试的写法
  2. react 最佳入门_miaov-React 最佳入门
  3. Golang——秒懂函数、参数、可变参数、匿名函数、回调函数、内置函数
  4. 《论文笔记》Robust Cooperative UAV Visual SLAM
  5. video js 全屏时,遇到18:9的长屏幕时,画面被切割
  6. linux系统启动报错:[contains a file system with errors, check forced]的解决方法参考【ZT】
  7. WCF测试工具,post经验
  8. 如何做一个MySQL优良数据库_MySQL数据库如何做好优化
  9. VMware vSphere 5.1 群集深入解析(二十九)-故障排错
  10. 字节跳动 AI Lab 21届校招启动啦!
  11. Firefox 火狐恢复下载失败的任务(原创)
  12. cvs数据格式 gps_CSV、TXT 和 GPX 文件
  13. win10计算机休眠快捷键,win10睡眠快捷键,win10睡眠按啥键唤醒
  14. webUploader选择文件按钮无效
  15. OpenFOAM提取等值面并计算面积
  16. 02 学计算机组成原理是学什么?
  17. 本以为能躺着进华为,结果陆续收到京东/滴滴/爱奇艺offer的我迷茫了
  18. python爬虫微博评论图片_python爬虫爬取微博评论
  19. 蓝桥杯练习系统答案-数的读法-Python
  20. 肖特基二极管的这几点技术参数,你未必全都知道

热门文章

  1. 数据库缓存双写一致性的一些个人想法
  2. 通过终端,查看sqlite3的存储文件
  3. CoreData简介
  4. gtx1660是什么级别的_GTX1660Ti到底属于什么系列?Nvidia一句话定性了
  5. JAVA入门级教学之(构造方法)
  6. JAVA入门级教学之(方法-2)
  7. android fragment framelayout,framelayout中fragment的切换
  8. python except用法和作用_Python面试题(部分附带面试标准答案) 建议收藏
  9. java异常处理机制_Java编程中的异常机制
  10. 电脑反应慢卡怎么解决_电脑键盘失灵怎么解决