mysql开启binlog并配置定期删除以及文件大小,删库跑路之数据恢复

news2024/11/25 12:43:48

一、开启并binlog日志并配置

1、配置文件

[mysqld]
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=C:\\JJS\\software\\mysql-5.7.41-winx64\\mysql-5.7.41-winx64
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 选择binlog日志模式
binlog_format = mixed
# 开启binlog日志
log_bin =C:\\JJS\\software\\mysql-5.7.41-winx64\\jjs_binlog
# 日志最长保存七天
expire_logs_days = 7
# binglog日志单个文件最大512m
max_binlog_size = 512m
# 缓冲区内存大小
binlog_cache_size = 4m
# 最大缓冲区内存大小
max_binlog_cache_size = 1024m
# 不指定定义binlog日志同步到硬盘的规则。取值范围为0~N
sync_binlog=0
# binlog遇到错误的情况处理方式
binlog_error_action=ABORT_SERVER

server-id=1

2、参数说明

log_bin 

log_bin=ON # 是否激活二进制日志

log_bin_basename

指定了binlog的基础命名和存储路径也可以通过–log-bin(如上面贴的配置)设置。也就是说像上面的配置binlog文件会存在C:\\JJS\\software\\mysql-5.7.41-winx64目录下,文件命名方式为C:\\JJS\\software\\mysql-5.7.41-winx64\\jjs_binlog.0000xx

binlog_error_action

当发生不可以写、刷或同步binary log的时候,可能会导致数据一致性遭到破坏或者复制操作停止,这时候服务器要做什么操作。有两个选项ABORT_SERVER 服务关闭(默认值), IGNORE_ERROR 忽略错误。

binlog_format

定义binlog的日志写入格式。有三个选项可选:

STATEMENT
每一条被修改数据的sql都会记录到master的bin-log中,slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql再次执行。
优点:不需要记录每一行的数据变化,减少bin-log日志量,节约磁盘IO,提高新能;缺点:容易出现主从复制不一致
ROW
日志中会记录每一行数据被修改后的情况,然后在slave端对相同的数据进行修改。
优点:能清楚的记录每一行数据修改的细节;
缺点:数据量太大
MIXED
以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
这种模式会导致binglog可读性变差。
 

binlog_do_db和binlog_ignore_db

binlog_do_db = db1 # 此参数表示只记录指定数据库的二进制日志,默认全部记录
binlog_ignore_db = db2# 此参数表示不记录指定的数据库的二进制日志
 

sync_binlog

定义binlog日志同步到硬盘的规则。取值范围为0~N

0
当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让操作系统的Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。这个是性能最好的
1或者N
当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
 

二、通过binglog日志还原

前言,binlog日志是以事件的形式写入二进制文件的,所以在还原数据库之前应该要正确找到开始pos和结束的pos

先介绍几个相关指令(均为mysql指令)

查看第一个日志文件: show binlog events;

查看最后一个日志和结束点: show master status; 

查看指定的日志文件: show binlog events in 'xxx';

1、数据创建并查找起止位置:

通过inser语句插入几十条记录

 此时binlog日志已经生成了记录

 我们可以使用指令查看日志事件内容

show binlog events in 'jjs_binlog.000002'

可以看到开始位置是 4 

 结束位置是7924 

为了演示多个binlog还原数据库的情景,这里手动刷新了一次binlog日志,输入指令

Flush logs

 会立即看到产生了一个新的binlog日志

 继续使用insert语句插入多条数据

使用指令查询时间起止位置

show binlog events in 'jjs_binlog.000003'

可以看到开始位置是4

结束位置是5770

这时候使用delete语句,一下清空所有的数据

在使用语句查询终止位置

show binlog events in 'jjs_binlog.000003'

可以看红框一的终止位置5770是最后一条插入语句的终止位置,而从5770往后就是delete语句,可想而知,我们本次需要执行binlog文件的范围是jjs_binlog.000002 的4 至jjs_binlog.000003 的5770 

 

 

 

 2、开始还原

方式一: 挨个binlog日志还原(注意,以下的语句不是sql,不是在数据库内执行,而是cmd指令)
 

​​​​​​​mysqlbinlog --start-position=4 --stop-position=7924 --database=textdb  jjs_binlog.000002  | mysql -uroot -proot
mysqlbinlog --start-position=4 --stop-position=5770 --database=textdb  jjs_binlog.000003  | mysql -uroot -proot

执行完毕之后可以看到数据库恢复到之前的记录

方式二:一次还原多个文件

mysqlbinlog --no-defaults  --start-position=4  --database=textdb  jjs_binlog.000002  | mysql -uroot -proot -f 
mysqlbinlog --no-defaults --stop-position=5770 --database=textdb  jjs_binlog.000003  | mysql -uroot -proot -f 

如果设置到2个以上的binlog日志,还可以开头只需要写开始位置,中间不需要表明位置,表明整个binlog日志,然后结束的时候标明结束位置

mysqlbinlog --no-defaults  --start-position=4  --database=textdb  jjs_binlog.000002  | mysql -uroot -proot -f 

mysqlbinlog --no-defaults --database=textdb  jjs_binlog.000003  | mysql -uroot -proot -f 

mysqlbinlog --no-defaults --stop-position=5770 --database=textdb  jjs_binlog.000004  | mysql -uroot -proot -f 

注意:在不能精确把握开始位置的情况下,可以适当将开始位置往前调,因为如果是遇到update和delete语句,并不会影响整体的数据结果,如果遇到的是insert语句,则会报错,但是不会终止数据还原,一直到我们需要还原的位置即可正常开始还原数据

 

本章暂时结束,后面会更新binlog日志与数据库自动备份完美配合

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

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

相关文章

Vue前端生成UUID

基础使用 当使用Vue.js生成UUID时,我们可以使用 uuid 库来帮助我们生成通用唯一标识符(UUID)。UUID是一个128位的唯一标识符,它可以用于唯一标识对象、实体或数据。 以下是在Vue.js中生成UUID的详细步骤: 首先&…

SpringBoot——自动装配之@Import

文章目录 前言ImportImport 的作用1、Import(MyDemo1.class) 将某个对象加载至bean容器中2、Import一个类 该类实现了ImportSelector, 重写selectImports方法该方法返回了String[]数组的对象,数组里面的类都会注入到spring容器当中3、Import一个类,该类实…

Premiere Pro 2023(23.5) Mac

Premiere Pro是一个业界领先的视频编辑软件,旨在帮助用户快速、高效地制作和编辑专业质量的视频内容。作为Creative Cloud套装中的一部分,Premiere Pro具有丰富的功能和工具,可应对各种视频编辑需求。 Premiere Pro的主要特点包括多个视频和音…

Unity游戏源码分享-Unity版本的经典斗地主游戏完整源码

Unity游戏源码分享-Unity版本的经典斗地主游戏完整源码 工程地址: https://download.csdn.net/download/Highning0007/88057828

css+js实现点击特效效果

话不多说&#xff0c;先上效果图 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…

详细进行wrnchAI 与OpenPose 的姿势检测估计系统的各项性能比较

本文将对wrnchAI 与OpenPose的性能进行比较。我们评估了人体姿势估计系统,并通过比较 wrnchAI 与 OpenPose 的以下参数来报告我们的发现: 准确性运算速度系统要求型号尺寸其他特性 移动支持跟踪支持。绿屏分割。支持应用程序开发。许可易于设置和使用披露:我们从 wrnch 收…

Java - 集合

开篇 数组和集合对比 数组的不足: 1、长度开始时必须指定&#xff0c;而且一旦指定&#xff0c;不能修改&#xff0c;灵活性不够 2、保存的必须为同一类型的元素 3、使用数组进行增删元素的方法比较麻烦 集合 1、可以动态的保存任意多个对象 2、提供一系列操作对象的方法…

基于ResNet50算法实现图像分类识别

概要 在本文中将介绍使用Python语言&#xff0c;基于TensorFlow搭建ResNet50卷积神经网络对四种动物图像数据集进行训练&#xff0c;观察其模型训练效果。 一、目录 ResNet50介绍 图片模型训练预测 项目扩展 二、ResNet50介绍 ResNet50是一种基于深度卷积神经网络&#xff…

智迪科技在创业板上市:市值约31亿元,谢伟明和黎柏松为实控人

7月17日&#xff0c;珠海市智迪科技股份有限公司&#xff08;下称“智迪科技”&#xff0c;SZ:301503&#xff09;在深圳证券交易所创业板上市。本次上市&#xff0c;智迪科技的发行价为31.59元/股&#xff0c;发行数量为2000万股&#xff0c;募资总额约为6.32亿元&#xff0c;…

多线程、高并发(理解一)

线程的简单了解 进程、线程、纤程创建线程的几种方式synchronizedvolatileAtomicXJUC 同步锁ReentrantLockCountDownLatch 倒数的门栓CyclicBarrier 复杂操作完成&#xff0c;再走后续逻辑Phaser 所有线程需要在屏障上等待才能进入下一步执行ReadWriteLockSemaphoreExchanger 线…

MQTT协议在物联网环境中的应用及代码实现解析(三)

三、使用C#PC端编程读取MQTT服务器上特定的主题信息 以下是使用C#编程利用MQTT协议接收MQTT服务器“mqtt.laobai.net”上的“laobai_topic001”主题上的订阅信息&#xff0c;并动态显示在多行文本框中的程序代码示例&#xff0c;包括完整的代码注释和编程说明&#xff1a; us…

javascript中过滤二维对象数组重复的字段并只保留唯一值(array.filter与Array.from)

javascript中过滤二维对象数组重复的字段并只保留唯一值 1.Array.filter过滤array.filter()方法 2.Array.from过滤Array.from方法 1.Array.filter过滤 在JavaScript中&#xff0c;你可以使用Array.filter()和Set数据结构来过滤二维对象数组中重复的字段&#xff0c;只保留唯一…

CSS三栏布局的几种自适应的排版方式

CSS三栏布局的几种方式&#xff0c;主要有 float、position、flex实现。 对红色、蓝色 box 设置 float&#xff0c;绿色不设。 <style>* {margin: 0;padding: 0;}.left {width: 200px;height: 300px;background-color: red;float:left;}.right {width: 200px;height: 300…

计算机图形硬件(二) 5 - 4 硬拷贝设备

我们可以使用几种格式来获得图像的硬拷贝输出。为了演示或存档&#xff0c;可以将图像文件传送到生成投影胶片、35 mm幻灯片或电影胶片的设备与服务部门。也可将图形输出到打印机或绘图仪上&#xff0c;从而在纸上打印出图像。 输出设备生成图片的质量依赖于可显示的点的大小和…

浅尝python 一

浅尝python一 一、注释二、指定数值精度三、算数运算符四、字符串格式化输出五、打印六、类型转换&#xff0c;不会改变原数据七、比较运算符综合练习 一、注释 1、单行注释&#xff0c;快捷键 command/ # 此行被注释掉 2、多行注释 本行被注释 本行被注释or""&quo…

react报错信息

报错信息 render函数里dom不能直接展示obj对象 取变量记得要有{} https://segmentfault.com/q/1010000009619339 这样在写的时候就已经执行方法了&#xff0c;所以此处用箭头函数&#xff08;&#xff09;》{}才会在点击时执行或者 遍历数据使用map来遍历&#xff0c;使用forea…

matplotlib用面积填充实现lmplot

文章目录 示例参数回归图 示例 在绘图时经常遇到类似区域填充的问题&#xff0c;比如对于 y sin ⁡ x y\sin x ysinx函数&#xff0c;想填充其与X轴所围成的区间&#xff0c;那么就可以使用fill_between函数。 import numpy as np import matplotlib.pyplot as pltx np.ara…

Java开发基础系列(八):泛型及反射

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Java开发基础系列(八):泛型及反射 ⏱️ 创作时间&#xff1a; 2023年0…

ETLBox for .Net Crack

ETLBox for .Net Crack 为设计的轻量级ETL(提取转换负载)工具箱和数据集成库。NET。 ETL是现代商业智能应用程序的基础&#xff0c;是将分析与之前的所有其他组件分离的唯一方法。ETL是提取-加载、转换和转换的缩写&#xff0c;描述了一个由三个步骤组成的过程&#xff1a; 提取…

学生成绩管理系统|Python小应用练习

题目要求 实现学生成绩管理系统 输入学生成绩信息序列&#xff0c;获得成绩从高到低、从低到高、按某一门成绩的排列,相同成绩都按先录入排列在前的规则处理。 数据如下&#xff1a;(数据规则&#xff1a;学生姓名 高数成绩 英语成绩 大物成绩) SanZhang 70 80 61 SiLi 86 77 …