记录一次MySQL恢复

news2024/10/7 18:29:57

一、前言

此文章由一次数据库被黑客删除而引发
33d80d1a14156feb2092a70ad859564.png
由于对于Linux操作、docker使用、MySQL原理这些都相对不是很熟悉,所以记录下来避免以后在工作中遇到类似的问题而惊慌失措。

1.MySQL环境现状

docker管理的,8.0.26版本
启动语句:

docker run -d -p 3306:3306 --restart=always -v /data/soft/mysql/conf:/etc/mysql/conf.d -v /data/soft/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name  mysql mysql:8.0.26

2.存在的问题

  1. root密码简单导致被黑客攻击了,也是这次恢复的起因
  2. 数据卷挂载地址不是自己的常用地址,因为是直接用的之前虚拟机中的启动语句
  3. 没有对配置文件进行修改,配置常用的一些配置
    1. 还好MySQL8以后binlog日志默认开启
  4. 在装docker的时候把防火墙关了,想着我这破服务器没人看得上,就没开

3.恢复之后需要做的事情

  1. 修改数据卷挂载
  2. 配置常用的配置
  3. 安全方面
    1. 加强root密码
    2. 平时使用时,避免使用root账户
    3. 对访问数据库的ip进行限制
    4. 防火墙关了之后,处理完事务,要立即打开

二、恢复过程

1.查看binlog日志信息

MySQL5.7版本binlog默认不开启,MySQL8默认开启。

1)查看binlog的状态
show variables like '%log_bin%';

image.png
下面是我的binlog日志目录
image.png

2)如何开启binlog日志

需要修改my.cnf或my.ini配置文件,在[mysqld]下面增加 log_bin=mysql_bin_log,重启MySQL服务。

#log-bin=ON
#log-bin-basename=mysqlbinlog
binlog-format=ROW
log-bin=mysqlbinlog

需重启MySQL容器

3)查看binlog 事件

有以下几种方式:

show binary logs; //等价于show master logs;
show master status;
show binlog events;
show binlog events in 'mysqlbinlog.000001';

我目前的binlog日志是 binlog.000001-binlog.000010

show binlog events in 'binlog.000001'

通过这个可以大致的查找是从哪个地方开始删除的。
image.png
并且可以看到他添加了一张 RECOVER_YOUR_DATA的表,里面是勒索信息

2.通过binlog恢复

1)防止恢复数据后影响最新业务

需要执行flush logs,产生一个新的binlog文件,此时旧的binlog文件不会再有写入。

日志文件规则:

  1. 当停止或重启服务器时,服务器会把日志文件记入下一个日志文件,MySQL会在重启时生成一个新的日志文件,文件序号递增
  2. 如果日志文件超过max_binlog_size(默认值1G)系统变量配置的上线时,也会生成新的日志文件(在这里需要注意的是,如果你正使用大的事务,二进制日志还会超过max_binlog_size,不会生成新的日志文件,事务全写入一个二进制日志中,这种情况主要是为了保证事务的完整性)
  3. 日志被刷新时,新生成一个日志文件
2)找到恢复的起始位置
  • 数据恢复的开始位置
  • 数据恢复的结束位置
mysqlbinlog "文件名"
mysqlbinlog "文件名" > "test.sql"

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

mysqlbinlog --set-charset=utf-8 /var/lib/mysql/binlog.000001>backuptmp000001.sql

image.png
最终确定开始位置为:
binlog000002
编号:233
时间:240626 14:45:09

image.png
结束位置为
binlog000003
编号:33849
时间:240701 21:51:25

3)恢复操作
//按指定时间恢复
mysqlbinlog --start-datetime="2020-04-25 18:00:00" --stop datetime="2020-04-26 00:00:00" mysqlbinlog.000002 | mysql -uroot -p1234
//按事件位置号恢复
mysqlbinlog --start-position=154 --stop-position=957 mysqlbinlog.000002
| mysql -uroot -p1234

因为我的起始位置是在两个binlog里面,将起始位置各加上binlog文件即可

mysqlbinlog --start-position=233 binlog.000002 --stop-position=33849 binlog.000003 | mysql -uroot -p123456

三、恢复过程中的Linux语句记录

1.Linux防火墙命令

  1. 查看firewall服务状态
systemctl status firewalld
  1. 查看firewall的状态
firewall-cmd --state
  1. 开启防火墙
service firewalld start
  1. 重启防火墙
service firewalld restart
  1. 关闭防火墙
service firewalld stop
  1. 查看防火墙规则
firewall-cmd --list-all 

2.进入docker的MySQL容器

1)docker attach
docker attach mysql
  • docker attach 容器名称或容器ID

【注】
使用attach命令有一个问题,当有多个窗口同时使用该命令进入同一个容器时,所有的窗口中的信息都会同步显示,如果有一个窗口阻塞了,别的窗口也无法再进行其他操作。所以该命令只适合于自己的开发环境

2)docker exec
docker exec -it mysql bash
  • docker exec -it 容器名称或容器ID bash
  • bash:在mysql容器里面新开了一个bash进程,在该终端可以通过命令和mysql容器交互,类似于通过Xshell和远程linux服务器交互

3.docker容器内安装vim,ez,sz

apt-get update && apt-get install vim
apt-get update && apt-get install lrzsz

4.Linux查看文件常用命令

1)查看文件类型
file file_name
2)查看文本内容
(1)查看全部文本内容:
#1.输出所有文本内容
cat file_name

#2.文本内容所有行加上行编号输出
cat -n file_name


#3.文本内容非空行加上行编号输出
cat -b file_name

(2)分页查看文本内容:

1.more命令(常用的分页工具)

more file_name

2.less命令(more升级版分页工具)

less file_name

#显示行
less -N file_name
3)查看部分文件内容
(1)head命令

显示文件开头一些行的内容,默认显示文件前10行

1.查看显示文首内容

#head -n [number] file_name

head -n 100 file_name

#或不加 -n,head -100 file_name 也是显示文首100行内容

2.输出文首最后的多少个字节

head -c 10 file_name
(2)tail命令

显示文件最后一些行的内容,默认显示文件最后10行

1.显示文尾多少行内容

#tail -n [number] file_name

tail -n 100 file_name

2.当文件增长时输出追加的数据,比如日志实时生成,(Ctrl+c终止显示)

tail -f log_file

3.在-f与-s参数配合,睡眠几秒后再进行追加显示

tail -f -s 10 log_file

#10秒钟刷新一次

4.输出文尾最后的多少个字节

tail -c 10 file_name

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

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

相关文章

python pdfplumber优化表格提取

样例pdf 直接使用文本提取效果: 使用表格提取 根据提取的文本信息是没办法获取到表格数据的,太乱了。尤其是 3 4列。 解决: 自行画线,根据画线进行提取。 效果: 思路: 1.根据表头进行画竖线 2.根据行坐…

vue3 ~ pinia学习

先看两个图 一个vuex 一个pinia 根据图看出来 pinia更简单了 那么具体怎么操作呢 我们来看下~ 第一步 下载 yarn add pinia # 或者使用 npm npm install pinia 第二步 注册 创建一个 pinia 实例 (根 store) 并将其传递给应用: import { createApp } from v…

vue的$nextTick是什么是干什么用的?

为什么需要使用$nextTick?他的使用场景 1.你在接口返回之后在获取高度 正常等页面加载在mounted这个钩子函数里 这时候就需要找到接口赋值的地方 这样就可以获取到数据操作以后的dom元素了 $nextTick是什么是干什么用的? $nextTick() 是 Vue.js 框…

超详细:安装Linux系统、虚拟现实教程

文章目录 一、如何下载并使用VMware虚拟机1.百度搜索vmware2.进入官网点击Workstation Pro链接3.博通注册对应的账号4.博通填写用户名、密码后直接登录会跳转到博通登录页5.个人使用选择个人版 二、国内镜像网站下载(Centos版本)三、镜像系统的安装1.打开…

【等保2.0的内容有哪些?】

“在“等保2.0”的基础上,分别增加了云计算安全、移动互联安全、物联网安全、工控系统安全、大数据安全5个拓展需求。 《中华人民共和国刑法》第253条,非法将公民个人资料卖给他人,并处罚金。 违反国家相关法律法规,将其在执行公…

计算机系统基础(三)

1.程序转换概述 机器指令和汇编指令 机器指令与汇编指令意义对应,都是机器级指令 汇编指令 如:M[R[bx]R[di]-6]←R[cl] R:寄存器内容 M:存储单元内容 机器指令 高级语言转换为机器代码的过程 根据计算机系统基础&#xff…

KEYSIGHT是德科技 E5063A ENA 系列网络分析仪

E5063A ENA 矢量网络分析仪 18GHz 2端口 降低无源射频元器件的测试成本 Keysight E5063A ENA 是一款经济适用的台式矢量网络分析仪,可用于测试简单的无源元器件,例如频率最高达到 18 GHz 的天线、滤波器、电缆或连接器。 作为业界闻名的 ENA 系列…

MLLM QLoRA微调实战:基于最新的袖珍Mini-InternVL模型

引言 大型语言模型(LLM)的世界正在不断发展,新的进步正在迅速出现。一个令人兴奋的领域是多模态LLM(MLLMs)的发展,这种模型既能够理解文本又能够理解图像,并与之进行交互。因此,这种…

ATG-2032:功率信号源的类型及应用领域简介

功率信号源是一种产生稳定、精确且可调节的电力信号的仪器,其主要作用是为测试和校准各种电子设备提供标准信号,以确保设备的精度和稳定性。 图:ATG-2000系列功率信号源 以下是功率信号源的主要类型和作用: 直流功率信号源 直流功…

Unity游戏帧率查看软件Fraps

Download Fraps 3.5.99 free version 下载、安装、运行这个软件,左上角就会自动显示帧率

SpringBoot的自动配置核心原理及拓展点

Spring Boot 的核心原理几个关键点 约定优于配置: Spring Boot 遵循约定优于配置的理念,通过预定义的约定,大大简化了 Spring 应用程序的配置和部署。例如,它自动配置了许多常见的开发任务(如数据库连接、Web 服务器配…

python提取图片中的文字写入excel文件,并打包为exe可执行文件

python提取图片数据写入excel,并打包为exe可执行文件 1. 以下面的图片为例2. python环境需要的依赖包3. 创建交互式窗口4. 读取文件夹下的所有文件并提取数据5. 提取图片中字段的代码6. 打包代码为exe可执行文件安装打包依赖文件运行打包代码 1. 以下面的图片为例 2…

大数据------JavaWeb------会话跟踪技术(Cookie、Session)(完整知识点汇总)

会话跟踪技术(Cookie&Session) 注意: HTTP协议是无状态 的,即每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内的数据共享 会话 当用户打开浏览器&am…

基于STM32的智能仓储温湿度监控系统

目录 引言环境准备智能仓储温湿度监控系统基础代码实现:实现智能仓储温湿度监控系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景:温湿度监控与管理问题解决方案与优化收尾与总结 1. 引言 智能仓储温湿度监…

【论文解读】Multiagent Multitraversal Multimodal Self-Driving: Open MARS Dataset

Open MARS Dataset 摘要引言Dataset CurationVehicle SetupData CollectionDataset Statistics Benchmark Task and ModelPlace RecognitionNeural Reconstruction Experimental ResultsVisual Place RecognitionNeural Reconstruction Opportunities and Challenges结论 摘要 …

echarts实现3D柱状图(视觉层面)

一、第一种效果 效果图 使用步骤 完整实例&#xff0c;copy就可直接使用 <template><div :class"className" :style"{height:height,width:width}" /> </template><script>import echarts from echartsrequire(echarts/theme/…

RAG技术下的文档智能检索

在数字化浪潮的推动下&#xff0c;信息检索已成为我们日常生活中不可或缺的一部分。然而&#xff0c;随着数据量的爆炸式增长&#xff0c;如何快速精准地从海量文档中检索出有价值的信息&#xff0c;成为了一个巨大的挑战。本文将带您走进 Pinecone 向量数据库的世界&#xff0…

计算机图形学games101——MVP

首先记得一个知识点 在旋转矩阵中&#xff0c;旋转矩阵的逆矩阵就是旋转矩阵的转置&#xff0c;这个矩阵是正交矩阵 我们需要做到的就是观测变换&#xff0c;这个变换包括视图变换和投影变换&#xff08;投影变换包含正交变换和透视变换&#xff09; 三维变换复习 首先复习…

Ubuntu20.04配置TurtleBot3 Waffle Pi远程控制

这里写目录标题 0. 机器人配置1. Ubuntu20.04配置TurtleBot3 Waffle Pi远程控制1.1 TurtleBot3 Waffle Pi端配置1.2 PC端配置1.2.1 安装turtlebot3的环境配置1.2.2 创建项目并安装Turtlebot31.2.3 配置环境变量 1.3 PC端与TurtleBot3进行通信1.3.1 PC端与机器人端互PING和SSH连…

ATA-L2水声功率放大器驱动水声换能器的测试研究

随着水声通信技术的发展&#xff0c;水下通信设备也开始逐步走向实用化&#xff0c;为了满足其实际的使用要求&#xff0c;功率放大器的设计需要具有高效率的特性&#xff0c;并能在水下长时间连续可靠的工作。 压电陶瓷换能器主要负责电信号与声信号之间的转换&#xff0c;换能…