数据库备份与恢复(实战mysqldump+bin-log)

一、为什么要进行数据库备份?

常见数据库备份的应用场景如下:

数据丢失应用场景:

人为操作失误造成某些数据被误操作
软件 BUG 造成部分数据或全部数据丢失
硬件故障造成数据库部分数据或全部数据丢失
安全漏洞被入侵数据恶意破坏

非数据丢失应用场景:

特殊应用场景下基于时间点的数据恢复
开发测试环境数据库搭建
相同数据库的新环境搭建
数据库或者数据迁移

二、数据库备份的分类


1、从物理与逻辑的角度,备份可分为

    物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
    逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份

2、从备份的内容来分,备份可分为

    完全备份:是指对数据库进行一个完整的备份,即备份整个数据库,如果数据较多会占用较大的时间和空间。
    部分备份:是指备份部分数据库(例如,只备份一个表)。
    部分备份又分为:
    增量备份:指的是在上次完全备份的基础上,对更改的数据进行备份。也就是说每次备份只会备份自上次备份之后到备份时间之内产生的数据。因此每次备份都比差异备份节约空间,但是恢复数据麻烦。
    差异备份:指的是自上一次完全备份以来变化的数据。和增量备份相比,浪费空间,但恢复数据比增量备份简单。
    MySQL 中进行不同方式的备份还要考虑存储引擎是否支持,如 MyISAM 不支持热备,支持温备和冷备。而 InnoDB 支持热备、温备和冷备。

3、从业务运行的角度,备份可分为

    冷备份(脱机备份):是在关闭数据库的时候进行的
    热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件
    温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作

三、如何设计数据库的备份策略


    备份策略设计的参考值

        能够容忍丢失多少数据
        恢复数据需要多长时间
        需要恢复哪一些数据


    备份策略


        针对不同的场景下, 我们应该制定不同的备份策略对数据库进行备份, 一般情况下, 备份方法为以下四种:
            第一种方式,冷备:直接cp,tar复制数据库文件;
            第二种方式,热备或温备+增量备或差异备:mysqldump+bin logs;(本次介绍重点)
            第三种方式,lvm2快照+bin logs;
            第四种方式,xtrabackup+bin logs;

四、冷备份与数据恢复

冷备份

    需要先停止数据库服务,再直接打包压缩数据库文件

    数据库所有文件目录:/var/lib/mysql/    文件目录可以在mysql的配置文件/etc/my.cnf中查看。
    
    1、停止数据库
    systemctl stop mysqld
    2、通过tar&cp等方式冷备数据库
    tar zcf /tmp/mysql_all_$(date +%F).tar.gz  /var/lib/mysql

备份操作

冷备份恢复

    故障时,停止服务,将故障的数据库文件移走到备份文件夹中进行备份,解压之前的备份数据库包到目录下,再移动到/var/lib/mysql/下,再重启服务,比较简单,就不演示了。

删除数据

停止数据库,并将当前数据库下的数据移动到其他目录,解压缩备份文件,移动到mysql的数据目录,开启数据验证数据恢复。

五、mysqldump+bin logs(温备+增量备)

通过mysqldump进行全备名令

mysqldump  -uroot -pPassword@123 --quick --all-databases --flush-logs --delete-master-logs  --lock-all-tables  > /tmp/mysql_bak.sql

mysqldump名令的重点选项介绍:

--all-databases, -A 

        指定dump所有数据库。等价于使用--databases选定所有库


--databases, -B   

        指定需要dump的库。该选项后的所有内容都被当成数据库名;在输出文件中的每个数据库前会加上建库语句和use语句


--quick, -q 

快速导出数据,该选项对于导出大表非常好用。默认导出数据时会一次性检索表中所有数据并加入到内存中,而该选项是每次检索一行并导出一行。


--flush-logs, -F

        在开始dump前先flush logs,如果同时使用了--all-databases,则依次在每个数据库dump前flush;如果同时使用了--lock-all-tables,--master-data
    或者--single-transaction,则仅flush一次,因为这几个选项是dump前开启一个长事务或者全局锁定。等价于使用flush tables with read lock锁定所有表,
    这样可以让dump和flush在完全精确的同一时刻执行。


--single-transaction 

        该选项在dump前将设置事务隔离级别为repeatable read并发送一个start transaction语句给服务端。该选项对于导出事务表如innodb表很有用,
    因为它在发出start transaction后能保证导出的数据库的一致性时而不阻塞任何的程序。该选项只能保证innodb表的一致性,无法保证myisam表
    的一致性。在使用该选项的时候,一定要保证没有任何其他连接在使用ALTER TABLE,CREATE TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE语句,
    因为一致性读无法隔离这些语句。--single-transaction选项和--lock-tables选项互斥,因为lock tables会隐式提交事务。

mysqldump温备测试+恢复

通过mysqldump建立全备

        mysqldump  -uroot -pPassword@123 --quick --all-databases --flush-logs --delete-master-logs  --lock-all-tables  > /tmp/mysql_bak.sql

mysqldump备份恢复

删除数据库

​​​​​​​

通过备份进行恢复

进入数据库执行source  /tmp/mysql_bak.sql

binlog增量备份

增量备份概况

开启二进制日志功能

修改配置文件,开启二进制日志功能

增量备份

log-bin日志保存到安全的地方就完成了一个时间段的增量备份。

一般恢复
将所有备份的二进制日志内容全部恢复
断点恢复
基于位置恢复:
数据库在某一时间点可能既有错误的操作也有正确的操作
可以基于精准的位置跳过错误的操作
基于时间点恢复:
跳过某个发生错误的时间点实现数据恢复
MySQL二进制日志对增量备份有重要的作用
二进制日志保存了所有更新或者可能更新数据库的操作;
二进制日志在启动MySQL服务器后开始记录,并在文件达到max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件;

开启二进制功能

vim /etc/my.cnf

增加bin-log=mysql-bin字段即可

进行增量备份

log-bin日志保存到安全的地方就完成了一个时间段的增量备份。

准备测试库,测试表

增量日志的一般恢复

将所有备份的二进制日志内容全部恢复

mysqlbinlog --no-defaults mysql_bin.000007 | mysql -uroot -pPassword@123

查看binlog二进制文件

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001

基于时间点恢复

从某个时间点到日志结尾的恢复
mysqlbinlog [–no-defaults] --start-datetime=’年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码

从某个时间点到某个时间点的恢复
mysqlbinlog [–no-defaults] --start-datetime=’年-月-日 小时:分钟:秒’ --stop-datetime=’年-月-日小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码

假如我们要跳过binlog00009里的如下update语句,binlog7、8按照顺序执行,到binlog9时,可以选择基于时间和pos点恢复,跳过update语句。

基于位置点恢复

从日志开头截止到某个位置点的恢复

mysqlbinlog --no-defaults --stop-position='1742726' mysql_bin.000009 |mysql -uroot -pPassword@123

从某个位置点到日志结尾的恢复,即正确操作之后的日志恢复
mysqlbinlog --no-defaults --start-position='1742869' mysql-bin.000009 |mysql -uroot -pPassword@123

参考博客:https://blog.csdn.net/qq_41786285/article/details/109443311?spm=1001.2014.3001.5506

  

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

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

相关文章

Leetcode—2331.计算布尔二叉树的值【简单】

2023每日刷题(六) Leetcode—2331.计算布尔二叉树的值 递归实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool evaluateTree(struct TreeNod…

2.1.C++项目:网络版五子棋对战之前置知识

文章目录 一、Websocketpp(一)Websocket介绍(二)报文格式(三)Websocketpp介绍(四)Websocketpp使用1.websocketpp常用接口介绍2. http/websocket服务器 (五)Js…

动画制作软件 Animate 2024 mac中文版介绍说明(an2024) v24.0

Animate 2024 mac是一款动画制作软件,它能帮助用户轻松制作出各种精美的动画作品。 Animate 2024拥有强大而直观的设计工作流程,能够让用户自由地构建动画场景、绘制精美的图形,并轻松添加动态效果。无论是传统手绘风格还是骨骼动画&#xff…

【Lua语法】字符串

Lua语言中的字符串是不可变值。不能像在C语言中那样直接改变某个字符串中的某个字符,但是可以通过创建一个新字符串的方式来达到修改的目的 print(add2(1 , 2 ,15,3))a "no one"b string.gsub(a , "no" , "on1111")print(a) print…

第87步 时间序列建模实战:LSTM回归建模

基于WIN10的64位系统演示 一、写在前面 这一期,我们介绍大名鼎鼎的LSTM回归。 同样,这里使用这个数据: 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal…

Compose Desktop 使用中的几个问题(分平台加载资源、编写Gradle 任务下载平台资源、桌面特有组件、鼠标键盘事件)

前言 在我之前的文章 Compose For Desktop 实践:使用 Compose-jb 做一个时间水印助手 中,我们使用 Compose For Desktop 写了一个用于读取照片 EXIF 中的拍摄日期参数并以文字水印的方式添加到照片上的桌面程序。 但是事实上,这个程序的名字…

从入门到进阶 之 ElasticSearch SpringData 继承篇

🌹 以上分享 从入门到进阶 之 ElasticSearch SpringData 继承篇,如有问题请指教写。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有需要,请👍点赞&#x1f…

PHP数据加密传输和存储问题

PHP数据加密的类型 md5(),sha1(),crypt() 双md5加密加盐

AAPCS:最新的ARM子程序调用规则

AAPCS是arm公司发布的ARM架构应用程序二进制(ABI)程序调用接口,该文档由多个版本,博主第一次ARM程序调用规则是在《ARM体系与结构编程》,但书中描述的是ATPCS,AAPCS是ATPCS的升级版。后面去ARM官网看到了AA…

自然语言处理基础——词表示

词表示 把自然语言中最基本的语言单元——词转换为机器能够理解的 词表示能完成以下两个能力 词相似度计算 词与词之间语义的关系 近义词&上位词 使用近义词或上位词表示的问题 遗漏差异 遗漏新的释义 带有主观性 数据吸收 需要大量人工构建 One-Hot Representation …

Kafka学习(最新版3.6.0)

文章目录 一、初识MQ1.1 什么是MQ1.2 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.3 技术对比1.4 MQ的两种模式 二、初识Kafka2.1 Kafka的使用场景2.2 Kafka基本概念2.3 Topic与Partition 三、Kafka基本使用3.1 部署前的准备3.2 启动kafka服务器3.3 Kafka核心概念之Topic3.4…

059:mapboxGL监听键盘事件,通过eastTo控制左右旋转

第059个 点击查看专栏目录 本示例是介绍演示如何在vue+mapbox中监听键盘事件,通过eastTo控制左右旋转。 本例通过easeTo方法来加减一定数值的bearing角度,通过.addEventListener的方法来监听键盘的按键动作。这里一定要设置interactive: false, 否则展现不出来旋转效果。 直…

机械设备经营小程序商城的作用是什么

由于机械设备厂商品牌需要各地招商代理,因此在管理方面也需要工具进行高效管理。如今各个行业都在开展数字化转型解决行业所遇难题或通过线上销售解决传统三公里难题及品牌扩张难题、用户消费渠道少等难题,构建会员体系精细化管理,同时还需要…

MySQL 主从复制原理

文章目录 1.主从复制方式1.1 异步复制1.2 半同步复制1.3 全同步复制 2.主从复制原理3.主从复制时推还是拉?参考文献 主从复制是 MySQL 高可用(备份)和高性能(读写分离)的基础,有了这个基础,MySQ…

【Ascend C算子开发(入门)】——Ascend C编程模式与范式

Ascend C编程模型与范式 1.并行计算架构抽象 Ascend C编程开发的算子是运行在AI Core上的,所以我们需要了解一下AI Core的结构。AI Core主要包括计算单元、存储单元、搬运单元。 计算单元包括了三种计算资源:Scalar计算单元(执行标量计算&…

外骨骼机器人和人形机器人概览

前言:一点思考 外骨骼机器人和人形机器人都曾随着一些爆品的出现火热过一段时间,但总感觉当前技术条件还不成熟,真正能落地的应用场景不多。马斯克在擎天柱发布会上被问到人形机器人的落地与前景问题时并没有给出明确答案,只是用…

c++ pcl点云变换骨架枝干添加树叶源码实例

程序示例精选 c pcl点云变换骨架枝干添加树叶源码实例 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《c pcl点云变换骨架枝干添加树叶源码实例》编写代码,代码整洁,…

自然语言处理---Tr ansformer机制详解之Transformer结构

1 Encoder模块 1.1 Encoder模块的结构和作用 经典的Transformer结构中的Encoder模块包含6个Encoder Block.每个Encoder Block包含一个多头自注意力层,和一个前馈全连接层. 1.2 Encoder Block 在Transformer架构中,6个一模一样的Encoder …

【JavaScript】深入浅出理解事件循环

1. 浏览器的进程模型 1.1 进程 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程。 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 1.2 线程 有了进程后,就可以运…

【广州华锐互动】VR营销心理学情景模拟培训系统介绍

在高度竞争的汽车市场中,销售人员需要具备强大的专业知识、引人入胜的销售技巧,以及敏锐的市场洞察力。然而,传统的培训方式往往无法满足这些需求,因为它们往往忽略了实践的重要性。 为了解决这个问题,许多公司开始采用…