Mysql bin-log日志恢复数据与物理备份-xtrabackup
主打一个数据备份与恢复
binlog与xtarbackup
- bin-log日志恢复
- 开启bin-log配置
- bin-log日志恢复
- 物理备份-xtrabackup
- 三种备份方式
- 安装xtrabackup
- 备份
- 全量备份
- 增量备份
- 差异备份
bin-log日志恢复
bin-log 日志,就记录对数据库进行的操作,什么增删改的操作全都在 bin-log 日志中,首先需要开启bin-log日志文件
开启bin-log配置
- 如图:在mysql的配置文件中的 [mysqld] 添加下面的配置
vim /etc/my.cnf # 不同的操作系统的配置文件不一样server_id=10 # 不指定,可随意写一个数
log-bin=/var/lib/mysql/mysql-bin.log
- 添加上面的配置之后需要重启一下
systemctl restart mysqld
- 重启之后在/var/lib/mysql 目录下面有一个 mysql_bin.00001 文件
- 在mysql中可以刷新bin-log日志
mysql> flush logs;
- 可以使用下面的查看当前使用的是哪一个 bin-log 日志文件
mysql> show master status+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 777 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
bin-log日志恢复
- 查看bin-log日志
mysql> select * from school.student;
+----+--------+------+
| id | name | sex |
+----+--------+------+
| 1 | 小温 | 男 |
| 2 | 小成 | 女 |
+----+--------+------+
2 rows in set (0.00 sec)mysql> delete from school.student;
Query OK, 2 rows affected (0.00 sec)
# 上面是删除表中的两条记录
# 查看 bin-log 日志文件中对应的操作
mysqlbinlog --base64-output=decode-rows /var/lib/mysql/mysql-bin.000003 -vv
BEGIN
-
这个图片是课件里面的,只供展示
-
里面有好多,我只截取上面对应的一部分的日志
/*!*/;
# at 927
#230926 0:48:58 server id 10 end_log_pos 991 CRC32 0x55632c6b Table_map: `school`.`student` mapped to number 83
# has_generated_invisible_primary_key=0
# at 991
#230926 0:48:58 server id 10 end_log_pos 1052 CRC32 0x67d51427 Delete_rows: table id 83 flags: STMT_END_F
### DELETE FROM `school`.`student`
### WHERE
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='小温' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
### @3=1 /* ENUM(1 byte) meta=63233 nullable=1 is_null=0 */
### DELETE FROM `school`.`student`
### WHERE
### @1=2 /* INT meta=0 nullable=0 is_null=0 */
### @2='小成' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
### @3=2 /* ENUM(1 byte) meta=63233 nullable=1 is_null=0 */
# at 1052
#230926 0:48:58 server id 10 end_log_pos 1083 CRC32 0x6eb05b5b Xid = 132
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
- 如果要恢复对应的数据,必须找到对应的添加语句
BEGIN
/*!*/;
# at 634
#230925 19:52:16 server id 10 end_log_pos 698 CRC32 0x26fba24f Table_map: `school`.`student` mapped to number 83
# has_generated_invisible_primary_key=0
# at 698
#230925 19:52:16 server id 10 end_log_pos 746 CRC32 0x88535582 Write_rows: table id 83 flags: STMT_END_F
### INSERT INTO `school`.`student`
### SET
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='小温' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
### @3=1 /* ENUM(1 byte) meta=63233 nullable=1 is_null=0 */
# at 746
#230925 19:52:16 server id 10 end_log_pos 777 CRC32 0xd1f2f433 Xid = 96
COMMIT/*!*/;
# at 777
#230926 0:48:58 server id 10 end_log_pos 856 CRC32 0x842fc928 Anonymous_GTID last_committed=2 sequence_number=3 rbr_only=yes original_committed_timestamp=1695660538233698 immediate_commit_timestamp=1695660538233698 transaction_length=306
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=1695660538233698 (2023-09-26 00:48:58.233698 CST)
# immediate_commit_timestamp=1695660538233698 (2023-09-26 00:48:58.233698 CST)
/*!80001 SET @@session.original_commit_timestamp=1695660538233698*//*!*/;
/*!80014 SET @@session.original_server_version=80034*//*!*/;
/*!80014 SET @@session.immediate_server_version=80034*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 856
#230926 0:48:58 server id 10 end_log_pos 927 CRC32 0xf9ee8b28 Query thread_id=18 exec_time=0 error_code=0
SET TIMESTAMP=1695660538/*!*/;
SET @@session.sql_mode=1168113696/*!*/;
BEGIN
- 上面是添加数据对应的日志
- 要恢复的话需要使用下面的这条语句
mysqlbinlog --start-position 634 --stop-position 927 /var/lib/mysql/mysql-bin.000003 | mysql -uroot -p1# 其中 634 是上面日志文件有个 at 634 相当于从这个时刻开始到 927 这个时刻
# 需要注意的是,在这个里面必须将 COMMITTED 事务提交语句也得包含起来
- 当然,还可以使用时间来恢复数据
mysqlbinlog --start-datetime='2019-8-21 23:55:54' --stop-datetime='2019-8-21 23:56:541' mylog.000001 | mysql -u root -p1
物理备份-xtrabackup
物理备份: 直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。
三种备份方式
- 全量备份-----完整备份:
每次都将所有数据(不管自第一次备份以来有没有修改过),进行一次完整的复制,备份后会清除文件的存档属性,方便日后增量备份或者差异备份进行版本比较。
特点:占用空间大,备份速度慢,但恢复时一次恢复到位,恢复速度快。
- 增量备份: 每次备份上一次备份到现在产生的新数据
在第一次完整备份之后,第二次开始每次都将添加了存档属性的文件进行备份,并且在备份之后再把这些存档属性清除。为什么要清除存档属性呢?这就是为了下一次备份的时候判断是否有文件变化,因为用户在每次备份以后修改这些被清除存档属性的文件,存档属性就会自动加上,相当于用户告诉系统,这些文件有变化,你下一次就备份这些文件,其他没有存档属性的就不需要备份,这就是增量备份的工作机制。
特点:因每次仅备份自上一次备份(注意是上一次,不是第一次)以来有变化的文件,所 以备份体积小,备份速度快,但是恢复的时候,需要按备份时间顺序,逐个备份版本进行恢 复,恢复时间长。
- 差异备份:只备份跟完整备份不一样的
在第一次完整备份之后,第二次开始每次都将所有文件与第一次完整备份的文件做比较,把自第一次完整备份以来所有修改过的文件进行备份,且以后每次备份都是和第一次完整备份进行比较(注意是第一次,不是上一次),备份自第一次完整备份以来所有的修改过的文件。
特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后一次的差异版本,恢复速度介于完整备份和增量备份之间。
简单的讲,完整备份就是不管三七二十一,每次都把指定的备份目录完整的复制一遍,不管目录下的文件有没有变化;增量备份就是每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件进行备份;差异备份就是每次都将第一次完整备份以来有变化的文件进行备份。
安装xtrabackup
官网:www.percona.com
- 下载
点击这个下载,然后复制到linux系统中解压 - 安装
# 解压后进入对应文件夹里面
yum install -y *.npm # 安装
备份
全量备份
- 备份
# 创建备份目录
mkdir /xtrabackup/full -p
# 全量备份
innobakeupex --user=root --password='1' /xtrabackup/full
- 恢复
# 1.关闭数据库
systemctl stop mysqld
# 2.清理数据
rm -rf /var/lib/mysql/*
# 3.恢复之前验证数据
innobackupex -apply-log /xtrabackup/full/对应的文件
# 4.恢复数据 恢复数据前需要将 bin-log 配置修改 将bin-log的文件目录修改为其他地方,
# 也可以将 bin-log 配置项注释掉
innobackupex --copy-back /xtrabackup/full/文件
# 5.修改权限
chown mysql.mysql /var/lib/mysql -R
增量备份
原理:每次备份上一次备份到现在产生的新数据
- 全量备份第一天的
innobackupex --user=root --password='1' /xtrabackup/full
- 增量备份第二天的
innobackupex --user=root --password='1' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/第一天备份的文件夹
- 增量备份第三天的
innobackupex --user=root --password='1' --incremental /xtarbackup/ --incremental-basedir=/xtrabackup/第二天备份的文件
- 恢复文件
# 1.关闭mysql
systemctl stop mysqld
# 2.清除数据
rm -rf /var/lib/mysql/*
# 3.依次重演备份文件
innobackupex --apply-log --redo-only /xtarbackup/第一天备份文件
# 之后的重演相当于将数据放到了第一天备份文件上
innobackupex --apply-log --redo-only /xtrabackup/第一天备份文件 --incremental-dir=/xtrabackup/第二天备份文件
innobackupex --apply-log --redo-only /xtrabackup/第一天备份文件 --incremental-dir=/xtrabackup/第三天备份文件
# 4.恢复数据
innobackupex --copy-back /xtarbackup/第一天备份文件
# 5.修改权限
chown mysql.mysql -R /var/lib/mysql/*
# 6.启动数据库
systemctl start mysqld
差异备份
- 全量备份第一天的
innobackupex --user=root --password='1' /xtarbackup/
- 第二到四天全不备份 第五天备份前面全部的数据,除外第一天
innobackupex --user=root --password='1' --incremental /xtarbackup/ --incremental-basedir=/xtarbackup/第一天备份的文件夹
- 恢复数据
# 1.关闭mysql
systemctl stop mysqld
# 2.清除数据
rm -rf /var/lib/mysql/*
# 3.依次重演备份文件
innobackupex --apply-log --redo-only /xtarbackup/第一天备份文件
innobackupex --apply-log --redo-only /xtarbackup/第一天备份文件 --incremental-dir=/xtarbackup/第五天备份文件
# 4.恢复数据
innobackupex --copy-back /xtarbackup/第一天备份文件
# 5.修改权限
chown mysql.mysql -R /var/lib/mysql/*
# 6.启动数据库
systemctl start mysqld
相关文章:

Mysql bin-log日志恢复数据与物理备份-xtrabackup
主打一个数据备份与恢复 binlog与xtarbackup bin-log日志恢复开启bin-log配置bin-log日志恢复 物理备份-xtrabackup三种备份方式安装xtrabackup备份全量备份增量备份差异备份 bin-log日志恢复 bin-log 日志,就记录对数据库进行的操作,什么增删改的操作全…...

JAVA 学习笔记 2年经验
文章目录 基础String、StringBuffer、StringBuilder的区别jvm堆和栈的区别垃圾回收标记阶段清除阶段 异常类型双亲委派机制hashmap和hashtable concurrentHashMap 1.7和1.8的区别java的数据结构排序算法,查找算法堆排序 ThreadLocal单例模式常量池synchronizedsynch…...

网络安全--安全认证、IPSEC技术
目录 1. 什么是数据认证,有什么作用,有哪些实现的技术手段? 2. 什么是身份认证,有什么作用,有哪些实现的技术手段? 3. 什么是VPN技术? 4. VPN技术有哪些分类? 5. IPSEC技术能够…...

Mysql——创建数据库,对表的创建及字段定义、数据录入、字段增加及删除、重命名表。
一.创建数据库 create database db_classics default charsetutf8mb4;//创建数据库 use db_classics;//使用该数据库二.对表的创建及字段定义 create table if not exists t_hero ( id int primary key auto_increment, Name varchar(100) not null unique, Nickname varchar(1…...

第1篇 目标检测概述 —(4)目标检测评价指标
前言:Hello大家好,我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标,可以分为两类,包括框级别评价指标和像素级别评价指标。本节课就给大家重点介绍下目标检测中的相关评价指标及其含义,希望大家学习之后…...
前端和后端是Web开发中的两个不同的领域,你更倾向于哪一种?
前端和后端是Web开发中的两个不同的领域,你更倾向于哪一种? 你可以从以下几个维度谈谈你对前端开发和后端开发的看法。此为内容创作模板,在发布之前请将不必要的内容删除 一、引言 提示:可对前端开发和后端开发进行简要介绍并提出…...

SpringBoot集成MyBatis-Plus实现增删改查
背景 因为学习工具的时候经常需要用到jar包,需要增删查改接口,所以参考文章实现了基于mybatis-plus的增删查改接口。 参考文章:第二十二节:SpringBoot集成MyBatis-Plus实现增删改查 原文中的git地址不存在,本文内容是原文代码修…...
基于STM32设计的智能水产养殖系统(华为云IOT)
一、设计简述 基于STM32设计的智能水产养殖监测系统 1.1 项目背景 随着经济的发展和人口的增长,对水产养殖的需求不断增加。然而,传统的水产养殖方式存在一系列问题,如水质污染、鱼病爆发等。因此,智能化水产养殖技术成为当前热门研究领域。其中,基于物联网技术的智能水产…...

运行软件找不到mfc140u.dll怎么解决,mfc140u.dll是什么文件
"找不到 mfc140u.dll"是一条错误信息,表示您的计算机上缺少一个名为 mfc140u.dll 的动态链接库(DLL)文件。这个文件通常与 Microsoft Visual C Redistributable 相关。Mfc140u.dll 是 Microsoft 基础类库(MFC࿰…...

数据结构(2-5~2-8)
2-5编写算法,在单链表中查找第一值为x的结点,并输出其前驱和后继的存储位置 #include<stdio.h> #include<stdlib.h>typedef int DataType; struct Node {DataType data; struct Node* next; }; typedef struct Node *PNode; …...

浅谈智能安全配电装置在老年人建筑中的应用
摘要:我国每年因触电伤亡人数非常多,大多数事故是发生在用电设备和配电装置。在电气事故中,无法预料和不可抗拒的事故是比较少的,大量用电事故可采取切实可行措施来预防。本文通过结合老年人建筑的特点和智能安全配电装置的功能&a…...
【ES】笔记-ES6模块化
暴露数据引入模块语法 规范基本语法分别暴露 (按需暴露)统一暴露 export {暴露内容1,暴露内容2}默认暴露 (适合只暴露一个数据) 只能暴露一次同时使用在app.js中引入 规范 每个文件都是一个模块要借助Babel和Browserify依次编译代码,才能在浏览器端运行…...
阿里云/腾讯云国际站代理:腾讯云国际站开户购买EdgeOne发布,安全加速一体化方案获业内认可
作为下一代CDN产品面世的腾讯云EdgeOne,历时一年服务,腾讯云国际站凭借安全加速一体化的解决方案,用All in One 架构构筑边缘应用无限想象。 近年来,随着5G网络、物联网、边缘计算的快速发展,爆炸式增长的数据量和市场…...
AIGC AI绘画 Midjourney 的详细使用手册
Midjourney参数提示与用法。 常见的命令有: --seed:种子值 --q:品质 --c:混乱 --no:负面提示 --iw:权重(0.5-2) ::(多重提示) -- repeat(重复) --stop(停止) --title(无缝贴图:适用于模型版本 1、2、3、5) --video(过程动画,适用于模型版本 1、2…...

Lua系列文章(1)---Lua5.4参考手册学习总结
windows系统上安装lua,下载地址: Github 下载地址:https://github.com/rjpcomputing/luaforwindows/releases 可以有一个叫SciTE的IDE环境执行lua程序 1 – 简介 Lua 是一种强大、高效、轻量级、可嵌入的脚本语言。 它支持过程编程, 面向对…...
Leetcode.121 买卖股票的最佳时机
题目链接 Leetcode.121 买卖股票的最佳时机 esay 题目描述 给定一个数组 p r i c e s prices prices ,它的第 i i i 个元素 p r i c e s [ i ] prices[i] prices[i] 表示一支给定股票第 i i i 天的价格。 你只能选择 某一天 买入这只股票,并选择在…...
IDE相关设置和插件
https://www.jetbrains.com/zh-cn/webstorm/ 一、插件 Chinese (Simplified) Language Pack:中文语言包Translation:翻译插件,需要申请国内翻译软件应用,可以搜索translations配置快捷键any-rule:正侧插件&#…...
nodejs之jsdom插件,运行浏览器环境
https://www.npmjs.com/package/jsdom 一、安装依赖 npm install jsdom二、用法 var jsdom require(jsdom) var { JSDOM } jsdom; var dom new JSDOM(<!DOCTYPE html><html lang"cn"><head></head><body></body></htm…...
运行vite项目报错:await import(‘source-map-support‘).then((r) => r.default.install())
项目场景: Electron vue3 vite项目实现屏幕截图功能 问题描述 运行 npm run dev 启动项目报错 await import(source-map-support).then((r) > r.default.install()) PS D:\study\electron\electronDemo> npm run dev> electronDemo0.0.1 dev D:\study…...
【GIT版本控制】--安装GIT
一、在不同操作系统上安装GIT 在不同操作系统上安装GIT非常容易,以下是针对不同操作系统的安装步骤: 在Windows上安装GIT: 访问 Git官方网站。下载适合您Windows版本的GIT安装程序(32位或64位)。运行下载的安装程序。…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...