MySQL通过binlog恢复数据

server/2024/11/26 19:58:35/

 查看记录二进制日志详细信息

SHOW VARIABLES LIKE '%log_bin%'

 

log_bin 为 ON说明这个参数是开启的,就是说系统是记录了bin log的

log_bin_basename 配置了bin log的文件路径及文件前缀名

log_bin_index  配置了bin log索引文件的路径

查看当前使用日志列表

show master status

 

根据log_bin_basename的路径查看binlog具体文件

 

 使用binlog日志恢复数据

原理:当数据库发生变化时,binlog会记录数据库中的所有变化;需要恢复的时候可以根据binlog中的开始位置和结束位置还原本部分操作;结束位置一般是数据被破坏或删除之前的位置。

注意:一切操作在本地测试库进行

最好把日志文件拷贝出来,到本地库恢复,因为这个文件记录当前数据库连接下所有库的操作,防止影响其他库的正常数据,所以最好将数据恢复到本地,然后同步回生产库

 

恢复时需要在binlog中找到两个位置:

  • 数据恢复的起始位置
  • 数据恢复的结束位置

 

 

通过mysqlbinlog将binlog转为sql,以方便查询具体位置 

 如果没有配置Mysql环境变量 需要进入mysql的安装路径bin目录下 执行命令

将binlog转为sql

mysqlbinlog --set-charset=utf-8 /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ-bin.000003 >data.sql

导出某段时间

mysqlbinlog --start-datetime="2022-09-09 09:00:00" --stop-datetime="2022-09-09 11:00:00" --base64-output=decode-rows -vv /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ-bin.000003 >data.sql

 

 

mysqlbinlog%E6%89%A7%E8%A1%8C%E6%81%A2%E5%A4%8D%E6%93%8D%E4%BD%9C">通过mysqlbinlog执行恢复操作

 通过偏移量数据修复

mysqlbinlog /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ-bin.000003  --start-position=59571111  --stop-position=93031069  | mysql -f -u 账号 -p密码

/Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ-bin.000003     要操作binlog文件
--start-position=59571111                                                              数据恢复的起始位置
--stop-position=93031069                                                            数据恢复的结束位置

-f                                                                                                       遇到错误时强制执行
mysql -uroot -p123456                                                                  数据恢复需要登录数据库

  1. mysqlbinlog命令中使用--database选项(部分情况适用)

    • 基本原理
      • 当你的二进制日志格式是基于语句(Statement - based)或者混合模式(Mixed - based)时,--database选项可以帮助你筛选出只与指定数据库相关的操作。例如,如果你想恢复数据库test_db,可以使用命令
      • mysqlbinlog --database = 数据库名 /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ - bin.000003 --start - position=59571111 --stop - position=93031069 | mysql - f - u 账号 - p密码
    • 局限性
      • 对于基于行(Row - based)的二进制日志格式,--database选项可能不会按照你期望的方式工作。因为在基于行的格式中,日志记录的是每行数据的变化,可能不会明确区分是哪个数据库的操作,所以这种情况下可能无法精准地只恢复指定数据库的内容。
  2. 通过解析二进制日志内容手动筛选(更灵活但复杂)
    • 查看日志内容
      • 首先使用mysqlbinlog工具查看二进制日志内容,例如mysqlbinlog /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ - bin.000003。在日志内容中,你可以找到与数据库操作相关的记录,如Query事件中会包含执行的 SQL 语句,其中会有数据库名称相关的信息。
    • 手动提取相关操作
      • 根据数据库名称来手动提取与要恢复的数据库相关的操作。例如,如果要恢复数据库test_db,你需要在日志中找到所有涉及test_dbINSERTUPDATEDELETE等操作的记录。这可能需要一些脚本或者文本处理工具来辅助完成。比如,在 Linux 环境下可以使用grep命令来筛选包含test_db的行,如mysqlbinlog /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ - bin.000003 | grep test_db,然后再对筛选后的内容进行进一步分析,确定哪些是需要恢复的操作,并将这些操作重新应用到数据库中。

http://www.ppmy.cn/server/145138.html

相关文章

44.扫雷第二部分、放置随机的雷,扫雷,炸死或成功 C语言

按照教程打完了。好几个bug都是自己打出来的。比如统计周围8个格子时,有一个各自加号填成了减号。我还以为平移了,一会显示是0一会显示是2。结果单纯的打错了。debug的时候断点放在scanf后面会顺畅一些。中间多放一些变量名方便监视。以及mine要多显示&a…

《硬件架构的艺术》笔记(五):低功耗设计

介绍 能量以热量形式消耗,温度升高芯片失效率也会增加,增加散热片或风扇会增加整体重量和成本,在SoC级别对功耗进行控制就可以减少甚至可能消除掉这些开支,产品也更小更便宜更可靠。本章描述了减少动态功耗和静态功耗的各种技术。…

阿里云整理(一)

阿里云整理 1. 介绍规模 2. 专业名词2.1 专有网络VPC2.2 安全组SG2.3 云服务器ECS2.4 资源组2.5 部署集2.5 web测试 1. 介绍 ‌阿里云是一家提供云计算和人工智能服务的科技公司,成立于2009年,总部位于杭州。‌它为全球客户提供全方位的云服务&#xff…

前端数据可视化思路及实现案例

目录 一、前端数据可视化思路 (一)明确数据与目标 (二)选择合适的可视化图表类型 (三)数据与图表的绑定及交互设计 (四)页面布局与样式设计 二、具体案例:使用 Ech…

MySQL 中有哪几种锁?

表锁(Table Locks) 描述:表锁是锁定整个表,防止其他事务对表进行修改。类型: 共享锁(Shared Locks):允许多个事务同时读取表中的数据,但不允许写操作。排他锁&#xff08…

html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转

效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图片预览</title><sty…

Stable Diffusion入门教程

要入门Stable Diffusion&#xff0c;你可以按照以下步骤进行&#xff1a; 1. 安装Stable Diffusion 获取安装包&#xff1a;你可以从GitHub上的 Stable Diffusion Web UI开源地址获取安装包。 一键启动程序包&#xff1a;如果你是小白不会装&#xff0c;可以使用国内秋葉aaaki开…

Leetcode148. 排序链表(HOT100)

链接 我写的错误代码&#xff1a; class Solution { public:ListNode* sortList(ListNode* head) {if (!head || !head->next)return head;ListNode* fast head;ListNode* slow head;while (fast&&fast->next) {fast fast->next->next;slow slow->…