MySQL基础(四)数据库备份

news2024/11/16 19:59:12

目录

前言

一、概述

1.数据备份的重要性

2.造成数据丢失的原因

二、备份类型

(一)、物理与逻辑角度

1.物理备份

2.逻辑备份

(二)、数据库备份策略角度

1.完整备份

2.增量备份

三、常见的备份方法

四、备份(重点)

(一)、完整备份

1.打包数据库文件备份

2.备份工具备份

(二)、增量备份

1.特点

2.二进制日志

3.增量恢复

总结



前言

在一些对数据可靠性要求很高的行业,若发生意外停机或数据丢失,其损失是十分惨重的。由此可见对重要的文件内容进行备份就显得尤为重要。

一、概述

数据库备份是指将数据库中的数据、表格、视图、存储过程、触发器等信息备份到另一个地方,以便在数据库丢失或损坏时进行恢复。数据库备份是数据库管理中必不可少的一项工作,通过备份可以保护数据库中的数据和业务。

1.数据备份的重要性

备份的主要目的是灾难恢复,备份还可以测试应用,回滚数据修改,查询历史数据,审计等。

2.造成数据丢失的原因

程序错误
人为错误
运算失败
磁盘故障
灾难(如火灾、地震)和盗窃

二、备份类型

(一)、物理与逻辑角度

1.物理备份

对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。


冷备份
    是在关闭数据库的时候进行的


热备份
    数据库处于运行状态,这种备份方法依赖于数据库的日志文件

2.逻辑备份

对数据库逻辑组件(如表等数据库对象)的备份,表时为逻辑数据库结构(create database、 create table等语句)和内容(insert语句或分割文本文件)的信息。

(二)、数据库备份策略角度

1.完整备份

完整备份指的是备份整个数据库的所有信息,包括数据库文件中所有的数据、表、视图、存储过程、触发器等。一般来说,完整备份是备份最全面、可靠的方式,但备份文件体积较大,备份时间也相对较长。

2.增量备份

增量备份指的是在完整备份的基础上,每隔一定时间备份新增的数据或修改的数据。这种备份方式可以节省备份时间和备份文件的空间,但需要配合特定软件或命令进行

三、常见的备份方法

物理备份
    物理冷备份时需要在数据库处于关闭状态下,能够较好的保证数据库的完整性。物理冷备份以用于非核心业务,这类业务都允许中断,物理冷备份的特点就是速度快,恢复时也是最为简单的,通过直接打包数据库文件夹(/usr/local/mysql/data)来实现备份。


使用专用备份工具
    mysqldump
    mysqlhotcopy


通过启用二进制日志增量备份
    MySQL支持增量备份,进行增量备份时必须启用二进制日志。二进制日志文件为用户提供复制。对执行备份点后进行的数据库更改所需的信息进行备份。如果进行增量备份(包含上次完全备份或增量备份以来发生的数据修改),需要刷新二进制日志。


第三方工具备份
    Percona XtraBackup是一个免费的MySQL热备份软件,支持在线备份innodb和XtraDB,也可以支持MySQL表备份。


注意事项
    定期备份,指定备份计划,严格遵守
    除了完全备份之外,开启binlog日志功能很重要
    使用统一的、容易理解的备份名称,推荐使用库名或者表名加上时间的命名规则

四、备份(重点)

(一)、完整备份

1.打包数据库文件备份

位置
    源码包的位置/usr/local/mysql/data/
    rpm包的位置/var/lib/mysql

备份
    在数据库中创建数据表,并写入数据
    停止数据库服务
    创建备份目录
    按照特定格式对数据库目录进行备份
        tar  czf  mysql_all-$(date  +%F).tar.gz  /var/lib/mysql/*

 

还原
    创建还原目录
    模拟元数据丢失
    将解压之后的数据还原值原目录
    登录查看

 

2.备份工具备份

备份
    工具
        mysqldump

对单个库进行完全备份
        mysqldump -u用户名 -p[密码] [选项] --databases 数据库名 > /备份路径/备份文件名

 对多个库进行完全备份
        mysqldump -u用户名 -p[密码] [选项] --databases 数据库名1  数据库名2…… > /备份路径/备份文件名

 对所有库进行完全备份(指自己所创建的所有数据库)
        mysqldump -u用户名 -p[密码] [选项] --opt --all-databases > /备份路径/备份文件名

  对表进行完全备份
        mysqldump -u用户名 -p[密码] [选项] 数据库名 数据表名 > /备份路径/备份文件名

对表的结构进行备份
        mysqldump -u用户名 -p[密码] -d 数据库名 数据表名 > /备份路径/备份文件名

还原
    工具
        source
            登录mysql 数据库执行source  备份sql脚本路径
        mysql
            mysql -u用户名 -p[密码] < 库备份脚本的路径
            mysql -u用户名 -p[密码] 库名 < 表备份脚本的路径

以单个数据库备份还原为例

-p后加密码会显示 [Warning] ,但不影响操作

或者在mysql里有source命令

以表的结构备份还原为例 

 

(二)、增量备份

使用完全备份时,备份与恢复的时间过长
增量备份就是备份自上一次备份之后增加的或改变的文件内容

1.特点


    没有重复数据,备份量不大,时间短
    恢复麻烦,需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复
    MySQL没有提供直接的增量备份办法,可以通过MySQL提供的二进制日志(binary logs(binlog))间接实现增量备份

2.二进制日志

MySQL二进制日志对备份的意义
    二进制日志保存了所有更新或者可能更新数据库的操作。
    二进制日志在启动MySQL服务器后开始记录,并在文件达到max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件。

开启二进制日志备份功能
    MySQL的配置文件的[mysqld]项中加入 log-bin=文件存放路径/文件前缀,如(server-id=1, log-bin=mysql-bin),然后重启mysqld服务。默认此配置存在。
    使用mysqld --log-bin=文件存放路径/文件前缀 重新启动mysqld服务每周选择服务器负载较轻的时间段,或者用户访问较少的时间段进行备份。

流程

vim /etc/my.cnf(rpm安装)插入

server-id=1

log-bin=musql-bin

systemctl restart mysqld

mysql -uroot -p123456

use class

select *from yi;

 insert into yi values(3,'sun',24),(4,'qin',24);

mysqladmin -uroot -p123456 flush-logs

mysqlbinlog  -v   /var/lib/mysql/mysql-bin.000001

 ls /var/lib/mysql

insert into yi values(5,'zhao',25),(6,'qian',25);

mysqladmin -uroot -p123456 flush-logs

mysqlbinlog  -v   /var/lib/mysql/mysql-bin.000002

 ls  /var/lib/mysql

  

delete from yi where id=1; 

mysqladmin -uroot -p123456 flush-logs

mysqlbinlog  -v   /var/lib/mysql/mysql-bin.000003

3.增量恢复

应用场景
    人为的SQL语句破坏了数据库
    在进行下一次全备之前发生系统故障导致数据库丢失
    在主从架构中,主库数据发生了故障,保证从库数据一致性

方法
    一般恢复
        备份的二进制日志内容全部恢复
        格式: mysqldbinlog [--no-defaults] 增量备份文件 | mysql -u用户名 -p密码


    基于时间点的恢复
        便于跳过某个发生错误的时间点实现数据恢复
        格式:从日志开头截止到某个时间点的恢复:
        mysqlbinlog [--no-defaults] --stop-datetime=’年-月-日 小时:分钟:秒‘ 二进制日志 | mysql -u用户名 -p密码


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


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


    基于位置的恢复
        可能在同一时间点既有错误的操作也有正确的操作,基于位置进行恢复更加准确
        mysqlbinlog --stop-position=‘操作 id‘ 二进制日志 | mysql -u用户名 -p密码
        mysqlbinlog --start-position=‘操作 id‘ 二进制日志 | mysql -u用户名 -p密码


总结

今天内容在日常工作中是尤为重要的一个环节,无论是小白还是实践高手都不可忽略的,可以有效避免人为或自然灾害造成的巨大损失无法恢复。

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

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

相关文章

“嵌入式开发:多元化就业,职业发展广阔“

嵌入式开发是一个发展迅速、就业前景广阔的领域。在各行各业的电子产品中&#xff0c;嵌入式应用无处不在&#xff0c;为智能化提供关键支持。作为嵌入式工程师&#xff0c;你将有广泛的就业机会。 你可以涉足消费电子、安全安防、汽车电子、医疗电子、电信等多个行业的计算机…

SSIS对SQL Server向Mysql数据转发表数据 (完结)

1、对于根据主键进行更新和插入新的数据&#xff0c;根据前面的文章&#xff0c;对于组件已经很熟悉了&#xff0c;我们直接加入一个 查找 组件 &#xff0c;如下所示 2、右键点击"查找"&#xff0c;然后“编辑” &#xff0c;选择“连接”,选中我们的目标连接器&…

独立站最全出单营销指南,新手卖家赶紧学起来吧!

这是一个需要投入大量时间和精力的挑战&#xff0c;但只有经过筛选在众多品牌和渠道中找到最适合自己的营销策略&#xff0c;才能成功。 新手商家经常会发现自己有很多可以改进的地方&#xff1a;品牌的颜色、字体以及其他一些细节。但真正走向成熟的商家会意识到&#xff0c;…

cv2抛出异常 “install libgtk2.0-dev and pkg-config, then re-run cmake or configure”

背景&#xff1a; linux中使用cv2显示图片的时候&#xff0c;运行提示异常&#xff1a; 处理方式&#xff1a; 网友的推荐操作&#xff1a; 切换至root模式安装 apt-get install libgtk2.0-dev进入OpenCV下载目录&#xff0c;重新编译 cd /home/XXX/opencv mkdir release …

【图像处理】使用 OpenCV 将您的照片变成卡通

图像到卡通 一、说明 在当今世界&#xff0c;我们被图像和视频所包围。从社交媒体到广告&#xff0c;图像已成为一种强大的交流媒介。但是你有没有想过&#xff0c;如果你能把你的照片变成卡通会发生什么&#xff1f;想象一下&#xff0c;为您最喜欢的照片创建动画版本&#xf…

MOS管可以双向流过电流吗

在大多数MOS管电路中&#xff0c;对于NMOS管&#xff0c;电流方向一般是从漏极到源极&#xff0c;对于PMOS管&#xff0c;电流方向一般是从源极到漏极。 那么MOS管可以反向流过电流吗&#xff1f;也就是NMOS管电流从源极到漏极&#xff0c;PMOS管电流从漏极到源极。 为了弄清这…

【数据结构】实验九:二叉树

实验九 二叉树 一、实验目的与要求 1&#xff09;理解二叉树的类型定义&#xff1b; 2&#xff09;掌握二叉树的存储方式及基于存储结构的基本操作实现&#xff1b; 二、 实验内容 1. 二叉树的结点定义如下&#xff1a; struct TreeNode { int m_nvalue; TreeNode* m_…

常见内网穿透工具,收好了!

前言 本文以渗透的视角&#xff0c;总结几种个人常用的内网穿透&#xff0c;内网代理工具&#xff0c;介绍其简单原理和使用方法。 1. nps-npc 1.1 简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协…

解密 CryptBot 窃密软件

CryptBot 是一种针对 Windows 操作系统进行信息窃取的恶意软件&#xff0c;在 2019 年被首次发现。它旨在窃取失陷主机的敏感信息&#xff0c;例如浏览器凭据、加密货币钱包、浏览器 Cookie、信用卡信息与屏幕截图等。 恶意软件简介 沙盒动态分析 样本启动时会创建一个进程&…

什么是SD NAND存储芯片

前言 大家好&#xff0c;我们一般在STM32项目开发中或者在其他嵌入式开发中&#xff0c;经常会用到存储芯片存储数据。今天我和大家来介绍一款存储芯片&#xff0c;我这里采用&#xff08;雷龙&#xff09; CS创世 SD NAND 。 SD NAND介绍 什么是SD NAND&#xff1f;它俗称贴…

Linux安装部署Nacos和sentinel

1.将nacos安装包下载到本地后上传到linux中 2.进入nacos的/bin目录,输入命令启动nacos [rootlocalhost bin]# sh startup.sh -m standalone注:使用第二种方式启动,同时增加日志记录的功能 2.2 startup.sh文件是不具备足够的权限,否则不能操作 给文件赋予执行权限 [rootlocalh…

记录Selenium自动化测试过程中接口的调用信息

上一篇博客&#xff0c;我写了python自动化框架的一些知识和粗浅的看法&#xff0c;在上一篇中我也给自己提出一个需求&#xff1a;如果记录在测试过程中接口的调用情况&#xff1f;提出这个需求&#xff0c;我觉得是有意义的。你在测试过程中肯定会遇到一些莫名其妙的问题&…

怎样计算一个算法的复杂度?

分析一个算法主要看这个算法的执行需要多少机器资源。在各种机器资源中&#xff0c;时间和空间是两个最主要的方面。因此&#xff0c;在进行算法分析时&#xff0c;人们最关心的就是运行算法所要花费的时间和算法中使用的各种数据所占用的空间资源。算法所花费的时间通常称为时…

51单片机--红外遥控

文章目录 红外遥控的介绍硬件电路NEC编码外部中断红外遥控实例代码 红外遥控的介绍 红外遥控是一种无线、非接触控制技术&#xff0c;通过使用红外线来传送控制信号。它具有抗干扰能力强、信息传输可靠、功耗低、成本低、易实现等显著优点&#xff0c;因此被广泛应用于各种电子…

数据库的分库分表shell脚本

通过嵌套循环实现 #! /bin/bashback_user"-uroot -pRoot12345." back_dir/backup/one #获取数据库名 mysql ${back_user} -N -e show databases | grep -Ev sys|mysql|information_schema|performance_schema > dbswhile read dbname do[ -d ${back_dir}/$dbnam…

openEuler 22.03 LTS系统搭建局域网上网代理服务器

生产网环境的一个痛点就是与外网隔离&#xff0c;内网的服务器如果需要进行补丁升级或者下载更新软件&#xff0c;比较困难&#xff0c;本文讲解在生产网中能访问公网的openEuler 22.03 LTS系统服务器上搭建代理服务器&#xff0c;供内网其它服务器连接公网&#xff0c;同时介绍…

海尔设计借助亚马逊云科技生成式AI,实现端到端的云上工业设计解决方案

海尔创新设计中心&#xff08;以下简称海尔设计&#xff09;成立于1994年&#xff0c;目前拥有400多名设计师&#xff0c;为海尔智家旗下七大品牌全球的所有产品提供设计创新和模式探索。亚马逊云科技为海尔设计提供了四个完整的云上解决方案&#xff0c;全面替代自有机房&…

Java019-1——面向对象的三大特性

一、封装性 将类的某些信息隐藏在类内部&#xff0c;不允许外部程序直接访问&#xff0c;而是通过该类提供的方法来实现对隐藏信息的操作和访问。&#xff08;这里说的信息就是类中的属性和方法&#xff09; 1.1、封装性的体现 想要通过代码体现封装性之前&#xff0c;需要先…

2019年全国硕士研究生入学统一考试管理类专业学位联考写作试题——解析版

写作&#xff1a;第56&#xff5e;57小题&#xff0c;共65分。其中论证有效性分析30分&#xff0c;论说文35分。 56&#xff0e;论证有效性分析 分析下述论述中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对论证的有效性进行分析…

【小白必看】使用Python爬取喜马拉雅音频并保存的示例代码

文章目录 前言运行效果截图导入requests库获取集数音频ID的链接提取音频ID和名称循环处理每个音频完整代码分点讲解 结束语 前言 本文介绍了如何使用Python中的requests库来获取音频文件并保存到本地。在这个例子中&#xff0c;我们使用了喜马拉雅平台上的一个API接口来获取音频…