接着说说mysqlbinlog解析工具如何做数据恢复

mysqlbinlog解析工具如何做数据恢复

    • mysqldump逻辑备份
    • 全量备份
    • 增量备份
    • 增量恢复

看腻了就来听听视频演示吧:https://www.bilibili.com/video/BV1Qh4y1Y7Fm/

mysqldump逻辑备份

  • 优点:可备份恢复部分数据
  • 缺点:速度慢

mysqlbinlog追binlog日志

# 备份文件查看要恢复的起始点 ooxx# 解析binlog文件,打印误操作SQL前后各10行,选择要恢复的结束位点 # at xxoo
mysqlbinlog -vvv mysql-bin.000002 | grep "DROP xxoo" -A 10 -B 10# Point-in-Time Recovery Using Binary Log
mysqlbinlog binlog.000001 binlog.000002 --start-position=ooxx --stop-position=xxoo | mysql -u root -p

全量备份

# 导出sakila库(表结构和数据)
mysqldump -uroot -proot -S /mysqldata/sock/mysql-3306.sock sakila > db_sakila.sql
# 导出多个库
mysqldump -uroot -proot --databases DB1 DB2 > db_db1_db2_$(date +%Y%m%d).sql
# 导出所有库
mysqldump -uroot -proot --all-databases > db_all.sql
# 脚步循环导出每个库并以库名文件保存
for DB in $(mysql -uroot -proot -e 'show databases' -s --skip-column-names);
domysqldump -uroot -proot $DB > "$DB.sql";
done# 备份表
mysqldump -uroot -proot --databases sakila --tables city > sakila_city.sql
mysqldump -uroot -proot sakila city > sakila_city.sql
# 指定多张表
mysqldump -uroot -proot dbname table1 table2 > tb_tbl1_tbl2.sql
# 只备份表结构
--no-data
# 只备份表数据
--no-create-info# 文本格式备份
mysqldump -uroot -proot \--tab=/sakila_data \--备份目录,一个表分root用户写入的表结构SQL文件+mysql写入的表数据文本文件--fields-terminated-by=, \--分隔字段值的字符串,默认 "\t"--fields-enclosed-by='"' \--将字段值的字符括起来,默认为无--lines-terminated-by=0x0d0a \--每行的结束字符串,0x0d0a是回车的编码,默认 "\n"sakila                      
# BUG:--tab指定的目录同MySQL配置的不一致                      
[root@localhost ~]# mysqldump -uroot -proot -S /mysqldata/sock/mysql-3306.sock --set-gtid-purged=OFF --tab=/sakila_data --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by=0x0d0a sakila
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement when executing 'SELECT INTO OUTFILE'
# 目录路径:只能导出到配置的目录下;空:没有限制。该变量是可读的,不能用set设置,要写在my.cnf下重启DB
mysql> show variables like "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |	-- 禁止,不能导出
+------------------+-------+
1 row in set (0.00 sec)

增量备份

# 开启binlog日志
server_id=3306
log-bin=mysql-binmysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)# 先做全量备份
mysqldump -uroot -proot sakila > db_sakila.sql# 查看数据目录
mysql> show variables like 'datadir';
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| datadir       | /mysqldata/data/ |
+---------------+------------------+
1 row in set (0.00 sec)
[root@localhost ~]# ls -rtlh /mysqldata/data/mysql-bin.*
-rw-r----- 1 mysql mysql  38M Aug 23 08:13 /mysqldata/data/mysql-bin.000001
-rw-r----- 1 mysql mysql   38 Aug 23 08:13 /mysqldata/data/mysql-bin.index
-rw-r----- 1 mysql mysql 363K Aug 23 08:22 /mysqldata/data/mysql-bin.000002

增量恢复

  • 删除损坏的库
  • 使用全量备份恢复表数据
  • 在增量备份中找出误操作纪录
  • 回放误操作之前的纪录
  • 忽略误操作纪录,回放之后的纪录
-- 模拟误删数据
mysql> delete from test;
Query OK, 1 rows affected (0.00 sec)# 误操作后先刷新binlog日志,倒数第2新的那个binlog日志就是要拿来做恢复的
[root@localhost ~]# ls -rtlh /mysqldata/data/mysql-bin.*
-rw-r----- 1 mysql mysql  38M Aug 23 08:13 /mysqldata/data/mysql-bin.000001
-rw-r----- 1 mysql mysql 859K Aug 23 08:33 /mysqldata/data/mysql-bin.000002
-rw-r----- 1 mysql mysql   57 Aug 23 08:33 /mysqldata/data/mysql-bin.index
# 告警忽略
[root@localhost ~]# mysqladmin -uroot -proot flush-logs
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~]# ls -rtlh /mysqldata/data/mysql-bin.*
-rw-r----- 1 mysql mysql  38M Aug 23 08:13 /mysqldata/data/mysql-bin.000001
-rw-r----- 1 mysql mysql 859K Aug 23 08:33 /mysqldata/data/mysql-bin.000002
-rw-r----- 1 mysql mysql   57 Aug 23 08:33 /mysqldata/data/mysql-bin.index
-rw-r----- 1 mysql mysql 3.2K Aug 23 08:33 /mysqldata/data/mysql-bin.000003# 准备恢复环境 
mysql> drop database sakila;
mysql> create database sakila;
mysql> use sakila
mysql> source /tmp/db_sakila.sql;
# 定位误操作位置,大写
[root@localhost ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v -v /mysqldata/data/mysql-bin.000002 | grep "DELETE FROM `sakila`.`text`" -A 10 -B 10
# at 853396		-- 此条日志的位置点
#220823  8:32:35 server id 3306  end_log_pos 853436 CRC32 0x13575540    Delete_rows: table id 685 flags: STMT_END_F		-- 此条日志的执行时间,以此时间为停止重放点
### DELETE FROM `sakila`.`text`
### WHERE
###   @1=2
# at 853436
#220823  8:32:35 server id 3306  end_log_pos 853467 CRC32 0xf25cc501    Xid = 400863
COMMIT/*!*/;
# at 853467
#220823  8:32:36 server id 3306  end_log_pos 853532 CRC32 0x187a0c08    GTID    last_committed=2252       sequence_number=2253    rbr_only=yes
# 基于时间点恢复,指定结束和开始时间点,注意格式
[root@localhost data]# mysqlbinlog --no-defaults --stop-datetime='2022-08-23 08:32:35' /mysqldata/data/mysql-bin.000002 | mysql -uroot -proot
[root@localhost data]# mysqlbinlog --no-defaults --start-datetime='2022-08-23 8:32:36' /mysqldata/data/mysql-bin.000002 | mysql -uroot -proot
# 基于位置点恢复,指定结束和开始的位置点
[root@localhost data]# mysqlbinlog --no-defaults --stop-position='853396' /mysqldata/data/mysql-bin.000002 | mysql -uroot -proot
[root@localhost data]# mysqlbinlog --no-defaults --start-position='853467' /mysqldata/data/mysql-bin.000002 | mysql -uroot -proot# 恢复后检查
mysql> select * from test;
Empty set (0.00 sec)mysql> select * from test;
+------+
| id   |
+------+
|    1 |
|    3 |
|    4 |
+------+
3 rows in set (0.00 sec)

恢复原理:追赶binlog日志,跳过误操作的事务

MySQL的binlog系列和奇技操作:

先来聊聊MySQL的binlog文件解析
接着说说mysqlbinlog解析工具如何做数据恢复
再来谈谈如何从binlog文件恢复误update的数据,模拟Oracle的闪回功能
接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能
借用binlog2sql工具轻松解析MySQL的binlog文件,再现Oracle的闪回功能
再来介绍另一个binlog文件解析的第三方工具my2sql
顺带来聊聊MySQL误删ibdata数据文件的恢复
MySQL大表直接复制文件的copy方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NPM 常用命令(九)

目录 1、npm link 1.1 使用语法 1.2 描述 2、npm login 2.1 描述 3、npm logout 3.1 描述 4、npm ls 4.1 使用语法 4.2 描述 5、npm org 5.1 使用语法 5.2 示例: 6、npm outdated 6.1 使用语法 6.2 描述 6.3 示例 7、npm owner 7.1 使用语法 7.2…

jupyter notebook的安装和使用

Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。 它可以一步步的运行出结果,而且可以实时的坐笔记。 一般安装了anaconda会自带jupyter notebook,所以你可以先启动试试能…

【C语言 模拟实现strcat函数】

C语言程序设计笔记---024 C语言之模拟实现strcat函数1、介绍strcat函数2、模拟实现strcat函数3、结语 C语言之模拟实现strcat函数 前言: 通过C语言字符串函数的知识,这篇将对strcat函数进行深入学习底层原理的知识,并模拟实现对应功能。 /知…

ipv6跟ipv4如何通讯

IPv6的128位地址通常写成8组,每组为四个十六进制数的形式。比如:AD80:0000:0000:0000:ABAA:0000:00C2:0002 是一个合法的IPv6地址。这个地址比较长,看起来不方便也不易于书写。零压缩法可以用来缩减其长度。如果几个连续段位的值都是0,那么这…

免费 AI 代码生成器 Amazon CodeWhisperer 初体验

文章作者:浪里行舟 简介 随着 ChatGPT 的到来,不由让很多程序员感到恐慌。虽然我们阻止不了 AI 时代到来,但是我们可以跟随 AI 的脚步,近期我发现了一个神仙 AI 代码生产工具 CodeWhisperer ,它是一项基于机器学习的服…

众佰诚:抖音开网店新手怎么做才能做起来

抖音作为国内最热门的短视频平台,其商业价值也日渐凸显。许多商家和个体经营者开始在抖音上开设网店,以此为新的销售渠道。那么,对于新手来说,如何才能在抖音上成功运营网店呢? 首先,明确经营定位。每个电商平台都有其…

小谈设计模式(16)—抽象工厂模式

小谈设计模式(16)—抽象工厂模式 专栏介绍专栏地址专栏介绍 抽象工厂模式结构抽象工厂(AbstractFactory)具体工厂(ConcreteFactory)抽象产品(AbstractProduct)具体产品(C…

FPGA project : fifo_sum

实验目标: col(列) 4 ;line(行) 5。相邻三行,按列求和。输出新的数据流。 实现方法: 通过rs232通信协议,输入数据流。第一行存进fifo1,第二行存进fifo2.当输入第三行第一个数据的时候,从fif…

Verilog HDL阻塞赋值和非阻塞赋值笔记

1. module test( input wire clk, input wire b, output reg a, output reg c ); always(posedge clk) begin ab; ca; end endmodule 上面的代码在vivado中综合后的电路为: 2. module test( input wire clk, input wire b, outp…

offer突击训练营,给你一个offer的保障,求职跳槽的看过来!

大家好,我是枫哥,🌟阿里云技术专家、📝资深面试官、🌹Java跳蚤网课堂创始人。拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。 目前组建的团队,专注Java技术分享&#xff0c…

一些比较好的行为识别的项目链接

文章目录 1、TSM官方GitHub链接: 链接 2、Temporal Segment Networks (TSN) ,这个先备忘一下,GitHub链接:链接 3、openpose python部署 GitHub链接:链接 4、openposeLSTM 打架识别 C部署:GitHub链接

CentOS7.9中使用packstack安装train版本

这里写目录标题 材料准备为什么选择packstack安装静态ip系统配置使用阿里云yum源安装packstack部署openstack 材料准备 ecs云服务器8核心16g内存一台,系统盘100GB,系统CentOS7.9vpc网段:192.168.0.1/24eip一个,带宽5M以上 为什么…

【Java每日一题】— —第二十三题:匿名对象及其使用问题(2023.10.07)

🕸️Hollow,各位小伙伴,今天我们要做的是第二十三题。 🎯问题: 匿名对象的应用场景如下: A:调用方法,仅仅只调用一次的时候。 注意:调用多次的时候,不适合。 那么&#x…

互联网Java工程师面试题·Memcached篇·第一弹

目录 1、Memcached 是什么,有什么作用? 1.1 memcached 服务在企业集群架构中有哪些应用场景? 1.1.1 作为数据库的前端缓存应用 1.1.2 作业集群的 session 会话共享存储 2、Memcached 服务分布式集群如何实现? 3、Memcach…

持续集成部署-k8s-资源调度:Deployment

持续集成部署-k8s-资源调度:Deployment 1. 创建与配置文件解析2. 滚动更新3. 版本回滚4. 扩容与缩容5. 暂停与恢复在 Kubernetes 中, Deployment和 StatefulSet是两种不同的控制器对象,用于管理Pod和容器的创建、删除和更新。它们之间的区别在于资源调度、稳定性和数据持久…

【Blender实景合成】会跳舞的神里绫华

效果预览 本文将介绍Blender用于实景合成的工作流程。 先看效果: 神里绫华爬上了我的办公桌 模型和动作资源准备 角色模型 本次主要使用的是原神游戏中,神里绫华的角色模型,该模型米哈游在模之屋网站上进行开源。 下载地址:ht…

1500*B. Zero Array(贪心数学找规律)

Problem - 1201B - Codeforces 解析&#xff1a; 因为每次减少2&#xff0c;如果总和为奇数肯定无法实现。 特例&#xff0c;如果某个数大于其他所有数的总和&#xff0c;同样无法实现。 其他均可实现。 #include<bits/stdc.h> using namespace std; #define int long l…

六、vpp 流表+负载均衡

草稿&#xff01;&#xff01;&#xff01; vpp node其实就是三个部分 1、plugin init 2、set command 3、function 实现功能&#xff0c;比如这里的流表 今天我们再用VPP实现一个流表的功能 一、流表 1.1流表----plugin init VLIB_REGISTER_NODE 注册流表节点 // 注册流…

在CSV文件读取时id读取之后成了‘锘縤d‘,该怎么修改

问题描述 准备用python实现一个小想法&#xff0c;里边数据可能会有点多&#xff0c;也为了代码能成块展示&#xff0c;所以打算写一个读取文件的函数。此时考虑到python中可以直接将CSV格式文件读取成字典的形式&#xff0c;所以尝试了一下。但是中间出现了错误&#xff0c;第…

软件测试|Python自动化测试实现的思路

Python自动化测试常用于Web应用、移动应用、桌面应用等的测试 Python自动化实现思路通常分为以下几步&#xff1a; 1. 确定自动化测试的范围和目标&#xff1a; 首先需要明确需要进行自动化测试的范围和目标&#xff0c;包括测试场景、测试用例、测试数据等。 2. 选择自动化…