MySQL备份策略

mysqldump提供在线逻辑备份的功能。以下讨论使用mysqldump进行备份的策略。

假设我们使用以下命令在周日下午1点(此时负载较低)对所有数据库中的所有InnoDB表进行全备份:

$> mysqldump --all-databases --master-data --single-transaction > backup_sunday_1_PM.sql

mysqldump产生的.sql文件包含了一系列SQL INSERT语句,这些语句可用于稍后重新加载已转储的表。

这次备份操作在转储开始时对所有表获取一个全局读锁(使用FLUSH TABLES WITH READ LOCK)。一旦获取了这个锁,就会读取二进制日志坐标,并释放锁。如果在发出FLUSH语句时有长时间运行的更新语句,备份操作可能会暂停,直到这些语句完成。之后,转储变为无锁状态,不会干扰表的读写操作。

之前假设要备份的表是InnoDB表,因此--single-transaction使用一致性读取,并保证mysqldump看到的数据不会变化。(由其他客户端对InnoDB表所做的更改对mysqldump进程不可见。)如果备份操作包含非事务性表,则要求这些表在备份期间不发生变化。例如,对于mysql数据库中的MyISAM表,在备份期间不得对MySQL账户进行管理更改。

全备份是必要的,但创建它们并不总是方便的。它们会产生大型备份文件并需要时间来生成。它们在意义上并不是最优的,因为每个连续的全备份包含了所有数据,即使是自上次全备份以来未发生变化的那部分数据。更高效的方法是进行一次初始全备份,然后进行增量备份。增量备份更小,产生的时间也更短。但权衡之处在于,恢复时,不能仅通过重新加载全备份来恢复数据。你还必须处理增量备份以恢复增量变化。

为了进行增量备份,我们需要保存增量变化。在MySQL中,这些变化通过二进制日志表示,因此MySQL服务器应始终以--log-bin选项启动以启用该日志。启用了二进制日志记录后,服务器在更新数据时会将每一次数据变化写入一个文件。查看运行了几天的MySQL服务器的数据目录,我们会发现这些MySQL二进制日志文件:

-rw-rw---- 1 guilhem  guilhem   1277324 Nov 10 23:59 gbichot2-bin.000001
-rw-rw---- 1 guilhem  guilhem         4 Nov 10 23:59 gbichot2-bin.000002
...
-rw-rw---- 1 guilhem  guilhem       361 Nov 14 10:07 gbichot2-bin.index

每次重启时,MySQL服务器会使用序列中的下一个编号创建一个新的二进制日志文件。服务器运行时,你也可以通过发出FLUSH LOGS SQL语句或使用mysqladmin flush-logs命令手动告诉它关闭当前的二进制日志文件并开始一个新的。mysqldump也有一个刷新日志的选项。数据目录中的.index文件包含目录中所有MySQL二进制日志的列表。

MySQL二进制日志对恢复非常重要,因为它们构成了增量备份的集合。如果你在进行全备份时确保刷新了日志,那么之后创建的二进制日志文件将包含自备份以来所做的所有数据变化。让我们稍微修改之前的mysqldump命令,使其在进行全备份时刷新MySQL二进制日志,并且使转储文件包含新当前二进制日志的名称:

$> mysqldump --single-transaction --flush-logs --master-data=2 \--all-databases > backup_sunday_1_PM.sql

执行此命令后,数据目录中将包含一个新的二进制日志文件,gbichot2-bin.000007,因为--flush-logs选项导致服务器刷新其日志。--master-data选项使mysqldump将二进制日志信息写入其输出,因此生成的.sql转储文件包括这些行:

-- Position to start replication or point-in-time recovery from
-- CHANGE MASTER TO MASTER_LOG_FILE='gbichot2-bin.000007',MASTER_LOG_POS=4;

因为mysqldump命令进行了全备份,这些行意味着两件事:

转储文件包含了在写入gbichot2-bin.000007二进制日志文件或更高版本之前所做的所有更改。在备份之后记录的所有数据更改不在转储文件中,但存在于gbichot2-bin.000007二进制日志文件或更高版本中。

周一下午1点,我们可以通过刷新日志来创建一个增量备份,以开始一个新的二进制日志文件。例如,执行mysqladmin flush-logs命令会创建gbichot2-bin.000008。周日下午1点的全备份和周一下午1点之间的所有变化都写在gbichot2-bin.000007中。这个增量备份很重要,因此将其复制到安全的地方是个好主意。(例如,将其备份到磁带或DVD上,或复制到另一台机器上。)周二下午1点,执行另一个mysqladmin flush-logs命令。周一下午1点和周二下午1点之间的所有变化都写在gbichot2-bin.000008中(它也应该被复制到某个安全的地方)。

MySQL二进制日志会占用磁盘空间。为了释放空间,时不时地清除它们。一种方法是删除不再需要的二进制日志,例如当我们进行全备份时:

$> mysqldump --single-transaction --flush-logs --master-data=2 \--all-databases --delete-master-logs > backup_sunday_1_PM.sql

注意

使用mysqldump --delete-master-logs删除MySQL二进制日志可能会有风险,如果你的服务器是复制源服务器,因为副本可能还没有完全处理二进制日志的内容。在删除MySQL二进制日志之前应验证的事项,请参见“PURGE BINARY LOGS Statement”部分的说明。

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

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

相关文章

哪些因素会限制带宽的可用性?

当我们讨论带宽的可用性时,我们主要关注的是数据传输的速度和容量。带宽就像一条公路,数据就像行驶在公路上的车辆,带宽越大,可以同时传输的数据就越多,数据传输的速度也就越快。但是,就像公路会有各种限制…

【云原生运维问题记录】kubesphere登录不跳转问题

文章目录 现象问题排查 结论先行:kubesphere-system名称空间下reids宕机重启,会判断是否通过registry-proxy重新拉取镜像,该镜像原本是通过阿里云上拉取,代理上没有出现超时情况,导致失败。解决方案:删除re…

k8s-常用工作负载控制器(更高级管理Pod)

一、工作负载控制器是什么? 二、Deploymennt控制器:介绍与部署应用 部署 三、Deployment控制器:滚动升级、零停机 方式一: 通个加入健康检查可以,看到,nginx容器逐个被替代,最终每个都升级完成&…

嵌入式系统设计师之文件系统(3.2.5)

目录 ​​​​​​​一、文件和目录(II) 1、文件 2、目录 二、文件存取方法、存取控制(II) 1、文件存取方法 2、文件的访问 3、文件控制 三、常见嵌入式文件系统(I) 一、文件和目录(I…

AI助力农作物自动采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统

去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物,专家设计出来了很多用于采摘不同农作物的大型机械,看着非常震撼,但是我们国内农业的发展还是相对比较滞后的&#xff0…

国辰智企APS自动化排产平台:实现生产计划与其他系统无缝协同

在当今竞争激烈的制造环境中,有效的生产计划和排程对于企业的成功至关重要。APS生产计划排程平台作为一种先进的工具,正越来越受到企业的关注和应用。那么,APS生产计划排程平台有哪些类型呢?本文将为您详细介绍。 1.基于规则的APS…

力扣_字符串3—通配符匹配

题目 给你一个输入字符串 s s s 和一个字符模式 p p p ,请你实现一个支持 ? ? ? 和 ∗ * ∗ 匹配规则的通配符匹配: ? ? ? 可以匹配任何单个字符。 ∗ * ∗可以匹配任意字符序列(包括空字符序列)。 判定匹配成功的充要…

vue-element-admin npm install 失败解决

git地址:https://github.com/PanJiaChen/vue-element-admin/tree/master 原因: tui-editor插件改名导致 解决方法: 第一步: package.json文件 "tui-editor": "1.3.3",修改为 "toast-ui/editor&qu…

小埋的解密游戏的题解

题目描述 小埋最近在玩一个解密游戏,这个游戏的解密方法是这样的,这个游戏会给你提供 个数,让我们求出这 个数里面,有多少个连续的数的平均数大于某个给定的数 。这个数可能会很大,所以我们要输出这个数对 的取模结果。现在小…

99例电气实物接线及52个自动化机械手动图

给大家分享一些流水线设计中常见的一些结构,这些动态图很直观,有助于大家了解其原理,非常好懂。 1.家庭总电箱接线图 2.经典双控灯接线 3.五孔一开接线 4.电动机点动控制接线(不安全) 5.电动机自锁接线图(…

git常用一些操作

1. git status // 查看当前目录更新 2. git checkout -b <NEW_BRANCH> // 新切一个分支&#xff08;只在第一次操作的时候做&#xff0c;后面就不用做了&#xff09; 3. git pull origin <BRANCH_NAME> …

Vue中跨域问题的解决

目录 1 跨域的概念 2 解决办法 2.1 修改请求实例的公共前缀 2.2 修改vite.config.js文件 1 跨域的概念 由于浏览器的同源策略限制&#xff0c;向不同源(不同协议、不同域名、不同端口)发送ajax请求会失败 2 解决办法 原理&#xff1a;使得浏览器向两个端口发送请求和接手…

怎样理解Vue单向数据流

在前端开发中&#xff0c;数据流是一个非常重要的概念。Vue.js作为一种流行的前端框架&#xff0c;采用了单向数据流的架构&#xff0c;旨在简化开发过程并提高应用的可维护性。本文将探讨Vue单向数据流的含义以及它的使用方法。 什么是单向数据流&#xff1f; 在Vue中&#…

H5 简约四色新科技风引导页源码

H5 简约四色新科技风引导页源码 源码介绍&#xff1a;一款四色切换自适应现代科技风动态背景的引导页源码&#xff0c;源码有主站按钮&#xff0c;分站按钮2个&#xff0c;QQ联系站长按钮一个。 下载地址&#xff1a; https://www.changyouzuhao.cn/11990.html

在Vue中如何动态绑定class和style属性

在Vue中&#xff0c;动态绑定class和style属性是我们经常遇到的需求。这个功能允许我们根据不同的条件来动态改变元素的样式&#xff0c;让我们的应用更加灵活和富有交互性。在本篇博客文章中&#xff0c;我将带你深入探索在Vue中如何实现这一功能。 首先&#xff0c;让我们了…

FPGA高端项目:IMX327 MIPI 视频解码 USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存UVC 时序USB3.0输出架构 6、vivado工程详解FPGA逻辑设计 7、工…

flask+pyinstaller实现mock接口,并打包到exe运行使用postman验证

flask代码 from flask import Flask, request, jsonifyapp Flask(__name__)app.route("/login", methods[POST]) def login():username request.json.get("username").strip() # 用户名password request.json.get("password").strip() # 密…

SQL--DDL

全称 Structured Query Language&#xff0c;结构化查询语言。操作关系型数据库的编程语言&#xff0c;定义了 一套操作关系型数据库统一标准。 1 SQL通用语法 在学习具体的SQL语句之前&#xff0c;先来了解一下SQL语言的同于语法。 1). SQL语句可以单行或多行书写&#xff0…

什么是IDE,新手用哪个IDE比较好

什么是IDE IDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;是一种为程序员提供软件开发所需的代码编辑、构建、调试等功能于一体的应用程序。IDE通常包含了代码编辑器、编译器、调试器和图形用户界面等工具&#xff0c;这些工…

解决IntellIJ Idea内存不足

突然有一天我在IDEA打开两个项目时&#xff0c;发生了报错&#xff0c;说我内存不足&#xff0c;我这电脑内存16G怎么会内存不足。下面是我的解决方案。 IntelliJ IDEA 报告内存不足的原因通常与以下几个因素有关&#xff1a; 项目规模较大&#xff1a;如果您正在开发的项目非…