MySql增量恢复

一、 使用二进制日志的时间点恢复

注意

本节和下一节中的许多示例都使用mysql客户端来处理mysqlbinlog生成的二进制日志输出。如果您的二进制日志包含\0(null)字符,那么mysql将无法解析该输出,除非您使用--binary模式选项调用它。

时间点恢复的信息源是在完全备份操作之后生成的一组二进制日志文件。因此,为了允许服务器恢复到某个时间点,必须在其上启用二进制日志记录,这是MySQL 8.0的默认设置

要从二进制日志中恢复数据,您必须知道当前二进制日志文件的名称和位置。默认情况下,服务器在数据目录中创建二进制日志文件,但可以使用--log-bin选项指定路径名,以将文件放置在不同的位置。要查看所有二进制日志文件的列表,请使用以下语句:

mysql> SHOW BINARY LOGS;

要确定当前二进制日志文件的名称,请发出 以下声明:

mysql> SHOW MASTER STATUS;

mysqlbinlog实用程序将二进制日志文件中的事件从二进制格式转换为文本,以便可以查看或应用它们。mysqlbinlog具有根据事件时间或事件在日志中的位置选择二进制日志部分的选项。

应用二进制日志中的事件会导致重新执行它们所表示的数据修改。这样可以在给定的时间段内恢复数据更改。要应用二进制日志中的事件,请使用mysql客户端处理mysqlbinlog输出:

$> mysqlbinlog binlog_files | mysql -u root -p

如果二进制日志文件已经加密(可以从MySQL 8.0.14开始),则mysqlbinlog不能像上面的示例那样直接读取它们,而是可以使用--read from remote server(-R)选项从服务器读取它们。例如:

$> mysqlbinlog --read-from-remote-server --host=host_name --port=3306  --user=root --password --ssl-mode=required  binlog_files | mysql -u root -p

这里,选项--ssl mode=required用于确保二进制日志文件中的数据在传输过程中受到保护,因为它是以未加密的格式发送到mysqlbinlog的。

重要

对于SSL模式,VERIFY_CA和VERIFY_IDENTITY是比REQUIRED更好的选择,因为它们有助于防止中间人攻击。若要实现其中一个设置,必须首先确保服务器的CA证书对环境中使用它的所有客户端都可靠可用,否则将导致可用性问题。

当您需要确定事件时间或位置以在执行事件之前选择部分日志内容时,查看日志内容非常有用。要查看日志中的事件,请将mysqlbinlog输出发送到一个分页程序中:

$> mysqlbinlog binlog_files | more

或者,将输出保存在文件中,然后在 文本编辑器:

$> mysqlbinlog binlog_files > tmpfile
$> ... edit tmpfile ...

编辑文件后,按如下方式应用内容:

$> mysql -u root -p < tmpfile

如果在MySQL服务器上有多个二进制日志要应用,请使用单个连接来应用要处理的所有二进制日志文件的内容。以下是一种方法:

$> mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

另一种方法是将整个日志写入单个文件,然后处理该文件:

$> mysqlbinlog binlog.000001 >  /tmp/statements.sql
$> mysqlbinlog binlog.000002 >> /tmp/statements.sql
$> mysql -u root -p -e "source /tmp/statements.sql"

二、使用事件位置的时间点恢复

例如,假设在2020年3月11日20:06:00左右,执行了一条SQL语句,删除了一个表。您可以执行时间点恢复,将服务器恢复到删除表之前的状态。以下是实现这一目标的一些示例步骤:

  1. 恢复在感兴趣的时间点之前创建的最后一个完整备份(称为tp,在我们的示例中为2020年3月11日20:06:00)。完成后,请记下已将服务器还原到的二进制日志位置,以便以后使用,然后重新启动服务器。

注意

虽然恢复的最后一个二进制日志位置也会在恢复和服务器重启后由InnoDB显示,但这不是获取恢复的结束日志位置的可靠方法,因为在显示位置反映的时间之后可能会发生DDL事件和非InnoDB更改。您的备份和恢复工具应该为您的恢复提供最后一个二进制日志位置:例如,如果您正在使用mysqlbinlog执行任务,请检查二进制日志回放的停止位置;如果您使用的是MySQL Enterprise Backup,则最后一个二进制日志位置已保存在备份中。

  1. 查找与要恢复数据库的时间点对应的精确二进制日志事件位置。在我们的例子中,假设我们知道表删除发生的大致时间(tp),我们可以通过使用mysqlbinlog实用程序检查该时间前后的日志内容来找到日志位置。使用--start-datetime和--stop-datetime选项指定tp附近的短时间段,然后在输出中查找事件。例如:
$> mysqlbinlog --start-datetime="2020-03-11 20:05:00" \--stop-datetime="2020-03-11 20:08:00" --verbose \/var/lib/mysql/bin.123456 | grep -C 15 "DROP TABLE"/*!80014 SET @@session.original_server_version=80019*//*!*/;
/*!80014 SET @@session.immediate_server_version=80019*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 232
#200311 20:06:20 server id 1  end_log_pos 355 CRC32 0x2fc1e5ea 	Query	thread_id=16	exec_time=0	error_code=0
SET TIMESTAMP=1583971580/*!*/;
SET @@session.pseudo_thread_id=16/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1168113696/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
/*!80011 SET @@session.default_collation_for_utf8mb4=255*//*!*/;
DROP TABLE `pets`.`cats` /* generated by server */
/*!*/;
# at 355
#200311 20:07:48 server id 1  end_log_pos 434 CRC32 0x123d65df 	Anonymous_GTID	last_committed=1	sequence_number=2	rbr_only=no	original_committed_timestamp=1583971668462467	immediate_commit_timestamp=1583971668462467	transaction_length=473
# original_commit_timestamp=1583971668462467 (2020-03-11 20:07:48.462467 EDT)
# immediate_commit_timestamp=1583971668462467 (2020-03-11 20:07:48.462467 EDT)
/*!80001 SET @@session.original_commit_timestamp=1583971668462467*//*!*/;
/*!80014 SET @@session.original_server_version=80019*//*!*/;
/*!80014 SET @@session.immediate_server_version=80019*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 434
#200311 20:07:48 server id 1  end_log_pos 828 CRC32 0x57fac9ac 	Query	thread_id=16	exec_time=0	error_code=0	Xid = 217
use `pets`/*!*/;
SET TIMESTAMP=1583971668/*!*/;
/*!80013 SET @@session.sql_require_primary_key=0*//*!*/;
CREATE TABLE dogs

从mysqlbinlog的输出中,DROP TABLE为“pets”`cats语句可以在二进制日志的232行#和355行#之间的段中找到,这意味着该语句发生在日志位置232之后,并且该日志位于DROP TABLE语句之后的位置355。

注意

仅使用 --开始日期时间和 --停止日期时间选项来帮助您找到 利息。使用这两个选项指定 不建议应用二进制日志段:有一个 使用 选项。改用 --start-position 和 --stop-position。

  1. 将二进制日志文件中的事件应用于服务器,从您在步骤1中找到的日志位置开始(假设为155),到您在步骤2中找到的位于感兴趣时间点之前的位置结束(即232):
$> mysqlbinlog --start-position=155 --stop-position=232 /var/lib/mysql/bin.123456 \| mysql -u root -p

该命令将所有事务从起始位置恢复到停止位置之前。由于mysqlbinlog的输出在记录每条SQL语句之前都包含SET TIMESTAMP语句,因此恢复的数据和相关的MySQL日志反映了事务执行的原始时间。

您的数据库现在已经恢复到感兴趣的时间点tp,就在表pets.cats被删除之前。

  1. 除了已经完成的时间点恢复之外,如果您还想在感兴趣的时间点之后重新执行所有语句,请再次使用mysqlbinlog将tp之后的所有事件应用到服务器。我们在步骤2中注意到,在我们想要跳过的语句之后,日志位于355位置;我们可以将其用于--start-position选项,以便包含该位置之后的任何语句:
 $> mysqlbinlog --start-position=355 /var/lib/mysql/bin.123456 \| mysql -u root -p

您的数据库已还原为二进制日志文件中记录的最新语句,但跳过了所选事件。

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

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

相关文章

高速收费站的智慧之选,工控机助力顺畅通行!

2020年初取消高速公路省界收费站后&#xff0c;全国高速公路进入“一张网运行、一体化服务”的新阶段。随着ETC用户量快速增长、驾乘人员对收费站高效通行需求不断提升&#xff0c;收费数据在线化运营及精准化、智能化、人性化的收费服务将成为主流。如何提高收费系统集成度、降…

软考高级系统架构设计师系列论文八十五:论软件产品线技术

软考高级系统架构设计师系列论文八十五:论软件产品线技术 一、摘要二、正文三、总结一、摘要 根据“十五”国防科技重点实验室—“机载XXPD火控雷达性能开发与评估实验室”的建设需求。我所在的中国x集团公司x所电子对抗研究部组织了用于该实验室目布式联网试验,主要任务是试…

h5逻辑_调用手机拨号功能

有时点击页面某个按钮&#xff0c;希望能掉起手机拨号页&#xff0c;实现步骤如下&#xff1a; [1] 在index.html中添加如下代码<meta name"format-detection" content"telephoneyes" />[2] 点击按钮调用函数callPhone (phoneNumber) {window.locat…

Java与Modbus-TCP/IP网络通讯

1.需求样例 举例5&#xff1a;浮点数参数读取&#xff08;读取温度测量值&#xff09;查看参数列表&#xff0c;温度测量值地址为320&#xff0c;根据Modbus协议&#xff0c;读取参数地址转换为16进制为&#xff1a;00H A0H&#xff0c;读取长度为2个字&#xff1a;00H 02H。 …

腾讯云服务器价格表大全_轻量服务器_CVM云服务器报价明细

腾讯云服务器租用费用表&#xff1a;轻量应用服务器2核2G4M带宽112元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、云服务器CVM S5实例2核2G配置280.8元一年、GPU服务器GN10Xp实例145元7天&#xff0c;腾讯云服务器网长期更新腾讯云轻量…

在Ubuntu上启动一个简单的用户登录接口服务

一个简单的用户登录接口 我使用 Python 和 Flask 框架来创建这个接口 首先&#xff0c;确保你已经安装了 Python 和 Flask。如果没有安装&#xff0c;可以通过以下命令在 Ubuntu 上安装&#xff1a; sudo apt update sudo apt install python3 python3-pip pip3 install Fla…

KASLR 内核随机地址配置开启

CONFIG_RANDOMIZE_BASE kernel features ---> Randomize of module region independently from the core kernel 参考链接&#xff1a;KASLR 内核动态地址 - kk Blog —— 通用基础 (abcdxyzk.github.io)

5G网关如何提升智慧乡村农业生产效率

得益于我国持续推进5G建设&#xff0c;截至今年5月&#xff0c;我国5G基站总数已达284.4万个&#xff0c;覆盖全国所有地级市、县城城区和9成以上的乡镇镇区&#xff0c;实现“镇镇通5G”&#xff0c;全面覆盖了从城市到农村的延伸。 依托5G网络的技术优势&#xff0c;智慧乡村…

5.6.webrtc三大线程

那今天呢&#xff1f;我们来介绍一下web rtc的三大线程&#xff0c;那为什么要介绍这三大线程呢&#xff1f;最关键的原因在于web rtc的所有其他线程都是由这三大线程所创建的。那当我们将这三个线程理解清楚之后呢&#xff1f;我们就知道其他线程与它们之间是怎样关系&#xf…

机器学习之Adam(Adaptive Moment Estimation)自适应学习率

Adam&#xff08;Adaptive Moment Estimation&#xff09;是一种常用的优化算法&#xff0c;特别适用于训练神经网络和深度学习模型。它是一种自适应学习率的优化算法&#xff0c;可以根据不同参数的梯度信息来动态调整学习率&#xff0c;以提高训练的效率和稳定性。 Adam算法…

如何提取视频的音频到手机?这个音频提取方法很简单

提取视频中的音频可以帮助您获得视频的声音部分&#xff0c;而无需观看整个视频。这对于那些只想听视频的声音或想将视频的声音与其他音频内容混合使用的人来说非常方便。此外&#xff0c;提取音频也可以为需要创建音频剪辑或混音的音频制作者提供帮助。那么怎么提取呢&#xf…

Java接入支付宝支付

本文只接入了支付宝中的APP支付&#xff0c;如果要拓展更多支付方式的的话&#xff0c;请看文末补充 项目支付流程 前端发起创建订单请求后端接受请求创建订单&#xff0c;并将订单参数进行支付宝对应签名并返回前端拿到签名后调起支付宝支付 本文主要写的就是2的过程 前期准…

报名倒计时!| 基于RflySim平台飞控底层算法开发专题培训(第二期)

RflySim 暑期学校 飞思实验室“基于RflySim平台飞控底层算法开发”系列专题培训第二期开启报名了&#xff01;专题培训由戴训华副教授以及飞思实验室学生&工程师团队主讲&#xff0c;采用“线上线下”集中授课形式&#xff0c;培训时间为8月28日-9月3日&#xff1b;课程内…

基于XL32F003单片机的可控硅调光方案

可控硅调光是一种用于调节电源输出电压的技术&#xff0c;被广泛应用于各种场景。它主要通过改变波形的导通角度来调节输出电压的大小&#xff0c;从而实现对照明设备亮度的控制。在照明市场占据了很大的调光市场。 可控硅调光的兼容性强&#xff0c;应用范围广。例如&#xff…

2023科隆游戏展:虚幻5游戏百花齐放,云渲染助力虚幻5高速渲染

8月23日&#xff0c;欧洲权威级游戏展示会——科隆游戏展拉开帷幕。今年的参展游戏也相当给力&#xff0c;数十款游戏新预告片在展会上公布&#xff0c;其中有不少游戏使用虚幻5引擎制作&#xff0c;开创了游戏开发新纪元。 虚幻5游戏百花齐放&#xff0c;渲染堪比电影级效果 …

数学软件和编程环境Mathematica 13 「mac」

Mathematica 13是一种强大的计算机代数系统和编程环境&#xff0c;它提供了广泛的数学功能和符号计算能力&#xff0c;可以进行高级数值计算、数据分析、可视化和模拟等任务。 Mathematica使用自己的独特的程序语言&#xff0c;称为Wolfram语言&#xff0c;它结合了函数式编程、…

Kotlin 中的 设计模式

单例模式 饿汉模式 饿汉模式在类初始化的时候就创建了对象&#xff0c;所以不存在线程安全问题。 局限性&#xff1a; 1、如果构造方法中有耗时操作的话&#xff0c;会导致这个类的加载比较慢&#xff1b; 2、饿汉模式一开始就创建实例&#xff0c;但是并没有调用&#xf…

软考A计划-系统集成项目管理工程师-知识产权管理

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【腾讯云Cloud Studio实战训练营】React 快速构建点餐页面+Python 拼图小游戏

文章目录 一、腾讯云 Cloud Studio 概述1.1 腾讯云 Cloud Studio 简介1.2 腾讯云 Cloud Studio 功能特点1.3 腾讯云 Cloud Studio 产品优势 二、Cloud Studio界面功能介绍2.1 注册登录2.1.1 新注册用户有免费的3000分钟体验 2.2 界面功能介绍2.2.1 空间模板2.2.2 开发空间关闭空…

js 实现一个数组对应位置插入另一个数组

js 实现一个数组对应位置插入另一个数组 文章目录 js 实现一个数组对应位置插入另一个数组前言一、网上的教程二、实现思路1.将两个数组分成三个数组2.将需要再指定位置插入另一个数组的数据进行拆分2-1.拆解的另一份数组数据2-2.拼接数组 - concat 前言 网上看了很多改写spli…