当前位置: 首页 > news >正文

C05S13-MySQL数据库备份与恢复

一、MySQL数据备份

1. 数据备份概述

数据备份的主要目的是灾难恢复,也就是当数据库等出现故障导致数据丢失,能够通过备份恢复数据。

数据备份可以分为物理备份和逻辑备份。物理备份,又称为冷备份,需要关闭数据库进行备份;逻辑备份,又称为热备份,不需要关闭数据库。数据备份的策略包括全量备份和增量备份,物理备份只能实现全量备份,而逻辑备份不仅支持全量备份,还支持增量备份。

2. mysqldump命令 – MySQL数据库备份

mysqldump命令是MySQL数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中。是针对数据库和数据表的备份。

# 基本语法
mysqldump [选项]# 常见用法
mysqldump -u 用户名 -p [密码] 库名 [表名] > 保存文件
  • 用户密码可以显示输入,或者交互输入。
  • 如果是导出多个数据库或多个数据表,需要使用英文逗号分隔。

常见的选项:

选项功能
-A所有数据库
-B指定数据库

3. 二进制日志备份

MySQL的二进制日志记录了对数据库的更改操作,也就是增、删、改、查等操作,查询操作不会被记录,因此可以通过二进制日志来实现数据的备份。

要实现基于二进制日志的数据备份,需要在MySQL的配置文件my.cnf中开启二进制日志功能。MySQL 8.0版本开始,默认开启二进制文件功能,二进制日志文件的默认前缀是binlog。下面是在my.cnf文件中的基本配置内容:

log-bin=mysql-bin
binlog-format=MIXED
  • log-bin:设置二进制日志文件的路径和前缀。默认路径是在MySQL的data目录下。
  • binlog-format:设置二进制日志文件的格式。

MySQL二进制日志文件的记录格式:

  • ROW

    基于数据行。记录每一行的数据,准确,但是恢复的效率低。

  • STATEMENT

    基于SQL语句,按照执行顺序记录SQL语句。高并发的情况下,SQL语句的记录顺序可能出错,导致恢复的数据有所偏差,虽然恢复的效率较高。

  • MIXED

    混合模式。正常情况下使用STATEMENT方式记录,高并发的时候会使用ROW的记录方式。

开启后,只要执行的更改操作都会被记录在日志文件中。使用MySQL自带的mysqlbinlog命令,可以解析查看二进制日志文件,结合管道符和重定向符就能够实现数据的恢复。根据二进制日志恢复数据,实际上就是重新执行日志文件中所记录的操作语句。

可以通过mysqlbinlog命令查看日志文件的全文,也可以基于位置或者基于时间查看日志文件的部分内容。因此恢复数据也包括全部恢复、基于位置的断点恢复和基于时间的断点恢复。

MySQL二进制日志文件的主要内容格式如下:

BEGIN
/*!*/;
# at 593
#241220 15:53:46 server id 1  end_log_pos 717 CRC32 0x8673bc7c  Query   thread_id=8     exec_time=0     error_code=0
SET TIMESTAMP=1734681226/*!*/;
insert into student values(1,'小明',18,'男')
/*!*/;
# at 717
#241220 15:53:46 server id 1  end_log_pos 748 CRC32 0x551b5137  Xid = 25
COMMIT/*!*/;
  • at 593:593表示事务在二进制日志文件中的位置。
  • 241220 15:53:46:事务的时间。使用mysqlbinlog基于时间查看,需要写成完整的时间格式,也就是2024-12-20 15:53:46的格式。

4. mysqlbinlog命令 – 查看二进制日志文件

使用mysqlbinlog命令可以查看二进制日志文件。

mysqlbinlog [选项] 二进制日志文件

常见的选项:

选项功能
–no-defaults不读取默认的配置文件,以免查看结果受到干扰
–start-position起始位置
–stop-position终止位置
–start-datetime起始时间
–stop-datetime终止时间

5. 二进制日志文件

二、数据备份与恢复实操

1. 全量备份与恢复

  1. 将MySQL数据库的数据目录备份。

    # 先关闭MySQL服务
    systemctl stop mysqld# 备份数据
    cd /usr/local/mysql/data
    tar -Jcvf /opt/mysql_all_$(date +%F).tar.xz *# 数据恢复
    tar -Jxvf /opt/mysql_all_2024-12-20.tar.xz -C /usr/local/mysql/data
    
  2. 使用mysqldump全量备份。

    # 导出数据库stu中的所有数据表数据
    mysqldump -u root -p stu > stu.sql
    # 导出数据库stu中指定的数据表stu_info数据
    mysqldump -u root -p stu stu_info > stu_info.sql# 恢复数据
    # 恢复数据库stu
    mysql -u root -p < stu.sql
    # 恢复数据表stu_info到数据库stu中
    mysql -u root -p < stu.sql
    mysql -u root -p stu < stu_info.sql
    

2. 增量备份与恢复

  1. 恢复全部数据,也就是将日志文件中记录的SQL语句全部重新执行一遍。

    mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p
    
  2. 基于位置恢复数据。

    # 恢复从某个位置开始的全部数据
    # 也就是执行日志文件中某个位置开始的全部SQL语句
    mysqlbinlog --no-defaults --start-position='593' mysql-bin.000001 | mysql -u root -p# 恢复从某个位置之前的全部数据
    # 也就是执行日志文件中某个位置之前的全部SQL语句
    mysqlbinlog --no-defaults --stop-position='593' mysql-bin.000001 | mysql -u root -p# 恢复某个位置范围内的数据
    # 也就是执行日志文件中某个位置范围内的全部SQL语句
    mysqlbinlog --no-defaults --start-position='593' --stop-position='717' mysql-bin.000001 | mysql -u root -p
    
  3. 基于时间恢复数据。

    # 恢复从某个时间开始的全部数据
    # 也就是执行日志文件中某个时间开始的全部SQL语句
    mysqlbinlog --no-defaults --start-datetime='2024-12-20 15:53:46' mysql-bin.000001 | mysql -u root -p# 恢复从某个时间之前的全部数据
    # 也就是执行日志文件中某个时间之前的全部SQL语句
    mysqlbinlog --no-defaults --stop-datetime='2024-12-20 15:53:46' mysql-bin.000001 | mysql -u root -p# 恢复某个时间范围内的数据
    # 也就是执行日志文件中某个时间范围内的全部SQL语句
    mysqlbinlog --no-defaults --start-datetime='2024-12-20 15:53:46' --stop-datetime='2024-12-20 15:58:12' mysql-bin.000001 | mysql -u root -p
    
  4. 以上三种恢复方法本质就是重新执行日志文件中的SQL语句,再次执行的命令也会被记录在日志文件当中。因此为了日后恢复数据不受到干扰,可以先通过flush刷新生成新的MySQL日志,然后再通过原有二进制日志文件恢复数据,程序执行的操作就会被记录在新的日志文件当中。

    该操作会关闭当前的二进制日志文件,并打开一个新的日志文件。常用于日志归档和维护,比如每天定时进行日志文件的归档保存。

    mysqladmin -u root -p flush-logs
    

三、MySQL常见的日志文件

1. 二进制日志

二进制日志主要记载除SELECT等查询语句外所执行的操作语句,从MySQL 8.0版本开始,二进制日志文件是默认开启的,可以不用手动配置。默认的二进制日志文件位于MySQL的数据目录下,前缀为binlog。

下面是在my.cnf中显式开启二进制日志文件的参数基本格式。

# 如果不指定路径只指定前缀,就依然保存在MySQL的数据目录下
log_bin=文件路径/前缀
binlog-format=文件的记录格式

2. 错误日志

错误日志主要包括MySQL服务的启动、关闭和报错。与二进制日志文件相同,错误日志也是默认开启的,默认的错误日志文件位于MySQL的数据目录下,名称是主机名.err。

下面是显示开启错误日志文件的参数基本格式。

log_error=文件路径

3. 普通日志

普通日志记录MySQL运行时所有的执行的SQL语句,可以根据文件进行MySQL的排错和调试。普通日志默认不开启。

下面是显示开启普通日志文件的参数基本格式。

general_log=1 # 1表示开启,0表示不开启
general_log_file=文件路径

4. 慢日志

慢日志用于记录MySQL中执行较慢的语句,默认不开启。

下面是显示开启慢日志文件的参数基本格式。

slow_query_log=1 # 1表示开启,0表示不开启
slow_query_log_file=文件路径    #慢日志路径
数基本格式。```shell
general_log=1 # 1表示开启,0表示不开启
general_log_file=文件路径

4. 慢日志

慢日志用于记录MySQL中执行较慢的语句,默认不开启。

下面是显示开启慢日志文件的参数基本格式。

slow_query_log=1 # 1表示开启,0表示不开启
slow_query_log_file=文件路径    #慢日志路径

相关文章:

C05S13-MySQL数据库备份与恢复

一、MySQL数据备份 1. 数据备份概述 数据备份的主要目的是灾难恢复&#xff0c;也就是当数据库等出现故障导致数据丢失&#xff0c;能够通过备份恢复数据。 数据备份可以分为物理备份和逻辑备份。物理备份&#xff0c;又称为冷备份&#xff0c;需要关闭数据库进行备份&#…...

【MySQL — 数据库基础】深入理解数据库服务与数据库关系、MySQL连接创建、客户端工具及架构解析

目录 1. 数据库服务&#xff06;数据库&#xff06;表之间的关系 1.1 复习 my.ini 1.2 MYSQL服务基于mysqld启动而启动 1.3 数据库服务的具体含义 1.4 数据库服务&数据库&表之间的关系 2. 客户端工具 2.1 客户端连接MySQL服务器 2.2 客…...

Three.js相机Camera控件知识梳理

原文&#xff1a;https://juejin.cn/post/7231089453695238204?searchId20241217193043D32C9115C2057FE3AD64 1. 相机类型 Three.js 主要提供了两种类型的相机&#xff1a;正交相机&#xff08;OrthographicCamera&#xff09;和透视相机&#xff08;PerspectiveCamera&…...

Unity 开发Apple Vision Pro空间锚点应用Spatial Anchor

空间锚点具有多方面的作用 虚拟物体定位与固定&#xff1a; 位置保持&#xff1a;可以把虚拟物体固定在现实世界中的特定区域或位置。即使使用者退出程序后再次打开&#xff0c;之前锚定过的虚拟物体仍然能够出现在之前所锚定的位置&#xff0c;为用户提供连贯的体验。比如在一…...

BGP的六种状态分别是什么?

此文章主要简单介绍下BGP的六种状态 1.Idle BGP会话的初始状态&#xff0c;路由器在此状态下不与任何BGP邻居通信&#xff0c;通常标识会话还没有开始或由于错误而未能启动&#xff0c;一般来说&#xff0c;缺乏去往BGP对等体的路由是导致BGP路由器其状态一直处于idle状态的常…...

IDEA搭建SpringBoot,MyBatis,Mysql工程项目

目录 一、前言 二、项目结构 三、初始化项目 四、SpringBoot项目集成Mybatis编写接口 五、代码仓库 一、前言 构建一个基于Spring Boot框架的现代化Web应用程序&#xff0c;以满足[公司/组织名称]对于[业务需求描述]的需求。通过利用Spring Boot简化企业级应用开发的优势&…...

Reactor

文章目录 正确的理解发送double free问题 1.把我们的reactor进行拆分2.链接管理3.Reactor的理论 listensock只需要设置_recv_cb&#xff0c;而其他sock&#xff0c;读&#xff0c;写&#xff0c;异常 所以今天写nullptr其实就不太对&#xff0c;添加为空就没办法去响应事件 获…...

在ESP32使用AT指令集与服务器进行TCP/IP通信时,<link ID> 解释

在ESP32使用AT指令集与服务器进行TCP/IP通信时&#xff0c;<link ID> 是一个非常重要的参数。它用于标识不同的连接实例&#xff0c;特别是在多连接场景下&#xff08;如同时建立多个TCP或UDP连接&#xff09;。每个连接都有唯一的<link ID>&#xff0c;通过这个ID…...

[SZ901] JTAG合并功能(类似FPGA菊花链)

SZ901 JTAG支持将JTAG端口组合&#xff0c;最多将四个JTAG变成一个 设置如下 Vivado 识别结果如下 两块板子&#xff0c;变成一组&#xff0c;&#xff0c;可以同时抓取信号&#xff0c;调试&#xff01; SZ901 已上架淘宝&#xff0c;搜素“SZ901”哦...

paimon中的Tag

TAG 在传统数仓场景中&#xff0c;从传统数据库中导入的事实表数据一般是全量导入&#xff0c;按天分区每天都存储一份全量数据&#xff0c;paimon对此提供了Tag机制&#xff0c;创建TAG时&#xff0c;会对当前数据做一份全量快照&#xff0c;在之后对表的数据进行更新也不会影…...

3分钟读懂数据分析的流程是什么

数据分析是基于商业目的&#xff0c;有目的地进行收集、整理、加工和分析数据&#xff0c;提炼出有价值的 信息的一个过程。整个过程大致可分为五个阶段&#xff0c;具体如下图所示。 1.明确目的和思路 在开展数据分析之前&#xff0c;我们必须要搞清楚几个问题&#xff0c;比…...

uniapp入门 01创建项目模版

0安装 hbuilder x 标准版 1.创建模版工程 2.创建官方 案例工程 index.uvuewen 文件解析 <!-- 模版 标签 --> <template><view></view></template><!-- 脚本 --> <script>export default {data() {return {}},onLoad() {},methods:…...

React 19新特性探索:提升性能与开发者体验

React作为最受欢迎的JavaScript库之一&#xff0c;不断推出新版本以应对日益复杂的应用需求。React 19作为最新的版本&#xff0c;引入了一系列令人兴奋的新特性和改进&#xff0c;旨在进一步提升应用的性能、开发效率和用户体验。 本文将深入探讨React 19的新特性&#xff0c;…...

Hive是什么,Hive介绍

官方网站&#xff1a;Apache Hive Hive是一个基于Hadoop的数据仓库工具&#xff0c;主要用于处理和查询存储在HDSF上的大规模数据‌。Hive通过将结构化的数据文件映射为数据库表&#xff0c;并提供类SQL的查询功能&#xff0c;使得用户可以使用SQL语句来执行复杂的​MapReduce任…...

[LeetCode-Python版] 定长滑动窗口1(1456 / 643 / 1343 / 2090 / 2379)

思路 把问题拆解成三步&#xff1a;入-更新-出。 入&#xff1a;下标为 i 的元素进入窗口&#xff0c;更新相关统计量。如果 i<k−1 则重复第一步。更新&#xff1a;更新答案。一般是更新最大值/最小值。出&#xff1a;下标为 i−(k-1) 的元素离开窗口&#xff0c;更新相关…...

imx6ull qt多页面控制系统(正点原子imx系列驱动开发)

开题答辩完了也考完了四六级&#xff0c;赶紧来更新一下一个月前留下的坑吧 QAQ首先&#xff0c;因为毕业设计需要用到这些知识所以就从网络上找了一个智能车机系统&#xff0c;借鉴了一下大佬的项目思路&#xff0c;缝缝补补一个月终于完成了这一内容。 在这里先感谢从两位大佬…...

OCR:文字识别

使用场景: 远程身份认证 自动识别录入用户身份/企业资质信息&#xff0c;应用于金融、政务、保险、电商、直播等场景&#xff0c;对用户、商家、主播进行实名身份认证&#xff0c;有效降低用户输入成本&#xff0c;控制业务风险 文档电子化 识别提取各类办公文档、合同文件、企…...

SQL Server通过存储过程实现自定义邮件格式并定时发送

在 SQL Server 中,可以通过存储过程实现自定义邮件格式并定时发送。这通常涉及以下几个步骤: 1. 配置 Database Mail:首先需要配置 SQL Server 的 Database Mail 功能。 2. 创建存储过程:编写存储过程来生成自定义邮件格式并发送邮件。 3. 设置 SQL Server 代理作…...

【进阶编程】MVC和MVVM实现前后端分离的实现

在 WPF 开发中&#xff0c;通常使用 MVVM&#xff08;Model-View-ViewModel&#xff09;架构来分离视图和业务逻辑&#xff0c;但在某些情况下&#xff0c;你可能希望将 MVC&#xff08;Model-View-Controller&#xff09;模式与 MVVM 结合使用。这种结合有时是为了兼顾不同的架…...

HT81297 18W内置升压单声道D类音频功放

1、特征 扩频技术 输出功率 18W(VBAT3.7V, RL4Ω, THDN10%, fN 1kHz) 16W(VBAT3.7V,RL-4Ω,THDN1%,fN1kHz) 8W(VBAT3.3V,RL-8Ω,THDN1%, fN1kHz) VBAr供电范围:3.0V至12V 高效H类升压功能 -自适应功放功率的升压轨&#xff0c;延长电池播放时间 (HT81297A) -可调节最大限流值&…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

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

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

在Zenodo下载文件 用到googlecolab googledrive

方法&#xff1a;Figshare/Zenodo上的数据/文件下载不下来&#xff1f;尝试利用Google Colab &#xff1a;https://zhuanlan.zhihu.com/p/1898503078782674027 参考&#xff1a; 通过Colab&谷歌云下载Figshare数据&#xff0c;超级实用&#xff01;&#xff01;&#xff0…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候&#xff0c;显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...