数据库备份和恢复

news2024/11/28 12:47:44

备份:
完全备份   增量备份
完全备份:将整个数据库完整的进行备份。
增量备份:在完全备份的基础之上,对后续新增的内容进行备份。

备份的需求:

备份的需求:
1、在生产环境中,数据的安全至关重要,任何数据的丢失都可能产生非常严重的后果。2、数据为什么会丢失,程序操作,运算错误,磁盘故障,不可预期的事件,人为操作。

物理备份:对数据库系统的物理文件(数据文件,日志文件),进行备份。

冷备份:关机备份,停止mysql服务,然后进行备份
热备份:开机备份,无须关闭mysal服务,进行备份

温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作


逻辑备份:只是对数据库的逻辑组件进行备份,(表结构),以sal语句的形式,把库,表结构,表数据进行备份保存。(直接在数据库系统中删除全部文件,逻辑备份无法恢复。)

数据库的备份策略 

完全备份(全量备份):每次对数据库进行完整的备份。

差异备份:备份自从上次完全备份之后被修改过的文件。

增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份。

常见的备份方法

物理冷备: (完全备份)

备份时数据库处于关闭状态,直接打包数据库文件
备份速度快,恢复时也是最简单的
专用备份工具mydump或mysqlhotcopy (完全备份,逻辑备份)

mysqldump常用的逻辑备份工具 (导出为sql脚本)
mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表
启用二进制日志进行增量备份 (增量备份)

进行增量备份,需要刷新二进制日志
第三方工具备份

免费的MySQL热备份软件Percona XtraBackup

1.完全备份

完全备份是对整个数据库、数据库结构和文件结构的备份

保存的是备份完成时刻的数据库

是差异备份与增量备份的基础

优点:操作简单
缺点:数据库文件占用量是很大的,占用空间太大,备份和恢复的时间都很长。而且需要暂停数据库服务。

完全备份的方法

(1)物理冷备份与恢复

  • 关闭MySQL数据库

  • 使用tar命令直接打包数据库文件夹

  • 直接替换现有MySQL目录即可

(2)mysqldump备份与恢复

  • MySQL自带的备份工具,可方便实现对MySQL的备份

  • 可以将指定的库、表导出为SQL脚本

  • 使用命令mysq|导入备份的数据

完全备份与恢复的操作

物理冷备份

(1)完全备份

 systemctl stop mysqld         #先关闭服务
 mkdir /backup/                #创建备份目录
 ​
 rpm -q xz                     #使用xz工具进行压缩,检查xz工具是否已安装
 yum install xz -y             #如果没安装,可以先yum安装
  cd  /usr/local/mysql/
 tar Jcf /backup/mysql_all_$(date +%F).tar.xz data  #打包数据库文件。/usr/local/mysql/data 为数据库文件存放目录

tar tf mysql_all_2022-10-25.tar.xz 解压数据库文件

(2)数据恢复 

删库

完全恢复

  1. cd /backup/

  2. tar Jxf mysql_all_2022-10-25.tar.xz -C /opt/

  3. mv /opt/data/ /usr/local/mysql/

(3)数据迁移 

 #主机A,使用scp命令将tar包传给另一台主机B
 scp /backup/mysql_all_2022-10-25.tar.xz root@192.168.73.106:/opt
 ​
 ##主机B的操作##
 systemctl stop mysqld     #关闭mysql
 cd /opt/
 mkdir /opt/bak/            #创建备份目录                  
 tar Jxf mysql_all_2022-10-25.tar.xz -C /opt/bak/  #将tar包解压到备份目录
 cd /opt/bak/              #切换到tar包的解压目录
 \cp -af usr/local/mysql/data/ /usr/local/mysql   #将data目录复制到/usr/local/mysql/目录下,覆盖原有文件
 ​
 systemctl start mysqld       #启动mysql
 mysql -u root -p             #登录数据库查看
 show databases;

逻辑完全备份和恢复的常见方法

mysqldump是常用的逻辑备份工具。

mysqldump可以将指定的库、表导出为SQL脚本。

(1)使用 xtrabackup 工具
是一个用来备份 MySQL数据库的开源工具。

主要特点:

在线热备份。可以备份innodb和myisam。innodb主要应用recovery原理。myisam直接拷贝文件。
支持流备份。可以备份到disk,tape和reomot host。–stream=tar ./ | ssh user@remotehost cat “>” /backup/dir/支持增量备份。可以利用lsn和基础备份目录来进行增量备份。
支持记录slave上的master log和master position信息。
 支持多个进程同时热备份,xtrabackup的稳定性还是挺好的。
(2)LVM
特点:热备、支持所有基于本地磁盘的存储引擎、快速备份、低开销、容易保持完整性、快速恢复等。

(3)cp + tar
使用直接拷贝数据库文件的方式进行打包备份,需要注意的是执行步骤:锁表、备份、解表。

恢复也很简单,直接拷贝到之前的数据库文件的存放目录即可。

注意:对于Innodb引擎的表来说,还需要备份日志文件,即ib_logfile*文件。因为当Innodb表损坏时,就可以依靠这些日志文件来恢复。

(4)mysqlhotcopy
mysqlhotcopy是一个perl程序,是lock tables、flush tables 和cp或scp来快速备份数据库。

它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表文件、数据文件、索引文件)所在的机器上。

mysqlhotcopy只能用于备份MyISAM。

(5)使用mysql主从复制
mysql的复制是指将主数据库的DDL和DML操作通过二进制文件(bin-log)传送到从服务器上,然后在从服务器上对这些日志做重新执行的操作,从而使得从服务器和主服务器保持数据的同步。
 

逻辑备份mysqldump工具的使用

(1)完全备份一个或多个完整的库

mysqldump -uroot -p[密码] --databases 库名1 [库名2].. >/备份路径/备份文件名.sql#导出的就是数据库脚本文件

(2)完全备份MySQL服务器中所有的库(包括库中所有的表) 

 mysqldump -u root -p[密码] --all-databases > / 备份路径/备份文件名.sql

(3)完全备份指定库中的部分表 

 mysqldump -u root -p[密码] [-d] 库名 表名1 [表名2] ... > /备份路径/备份文件名.sql
#使用“-d"选项,说明只保存数据库的表结构
 #不使用“-d”选项,说明表数据也进行备份

(4)查看备份的sql文件

 cd /opt/sql_bak
 cat 文件名 | grep -v "^--" |grep -v "^/" |grep -v "^$"
 或
  cat 文件名 | egrep -v "^--|^/|^$"

(5)恢复数据库的整个库

删库: 

 mysql -u root -p < /opt/sql_bak/test.sql     #重定向输入库文件
 ​
 mysql -u root -p -e 'SHOW DATABASES;'       #查看当前有哪些数据库

(6) 恢复数据库中的表

删除表: 

 #重定向导入备份文件,必须指定库名,且目标库必须存在,如果没有库就要建库
 mysql -u root -p test < /opt/sql_bak/info_info2.sql   

2.增量备份

增量备份产生的原因 
使用mysqldump进行完全备份时,备份数据中有重复数据,且备份时间与恢复时间过长。

增量备份是什么:是自上一次备份后增加/变化的文件或者内容

增量备份

1.优点:没有重复数据,备份量不大,时间短
2.缺点:恢复需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复

增量备份的过程 

MySQL没有提供直接的增量备份方法,可通过MySQL提供的二进制日志间接实现增量备份。

MySQL二进制日志对备份的意义

1.二进制日志保存了所有更新或者可能更新数据库的操作
2.二进制日志在启动MySQL服务器后开始记录,并在文件达到 max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件
3.只需定时执行flush logs方法重新创建新的日志,生成二进制文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份

增量备份的方式

  • 一般恢复

    • 将所有备份的二进制日志内容全部恢复
  • 基于位置恢复

    • 数据库在某一时间点可能既有错误的操作也有正确的操作
    • 可以基于精准的位置跳过错误的操作
  • 基于时间点恢复

    • 跳过某个发生错误的时间点实现数据恢复

增量备份的操作

 在进行增量备份前需要修改主配置文件:

vim /etc/my.cnf
 [mysqld]
 log-bin=mysql-bin    #开启二进制日志。如果使用相对路径,则保存在/usr/local/mysql/data/目录下
 binlog_format = MIXED     #可选,指定二进制日志(binlog)的记录格式为MIXED
 server-id= 1
 ​
 systemctl restart mysqld
 ls -l /usr/local/mysql/data/mysql-bin.*

二进制日志(binlog)有3种不同的记录格式:

STATEMENT (基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式STATEMENT  ​
1.STATEMENT (基于SQL语句):记录修改的sql语句。高并发的情况下,记录操作的sql语句时可能顺序会有错误,导致恢复数据时,数据丢失或有误差。效率高,但数据可能有误差。
​2.ROW(基于行):记录每一行数据,准确,但恢复时效率低。
3.MIXED(混合模式):正常情况下使用STATEMENT,高并发的情况下会智能地切换到ROW。

增量备份

insert into info  values(8,'小蓝','女',22,'武汉','喜欢听《鸡你太美》');
insert into info  values(9,'小孔','女',22,'四川','喜欢听《喂喂喂》');
 
 mysqladmin -u root -p flush-logs   #刷新出新的二进制文件

 mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001
 ​
 #--base64-output=decode-rows:使用64位编码机制去解码并按行读取
 #-v:显示详细内容
 

#创建一个新的文件夹 作为二进制备份文件保存的目录
mkdir -p /opt/sql_bak 
#将新产生的二进制备份文件移动至新的目录(更保险的方式:复制),并且以时间命名的方式修改其名称
 mv /usr/local/mysql/data/mysql-bin.000001  /opt/sql_bak/info_sql_`date +%Y%m%d`

数据恢复

delete from info where id=8 ;删除数据
delete from info where id=9 ;

mysqlbinlog --no-defaults /opt/sql_bak/info_sql_20221027 | mysql -u root -p

数据恢复方式

(1)基于位置点的恢复 

 #从某一个位置点开始恢复,一直到日志结尾
mysqlbinlog --no-defaults --start-position='位置点' 文件名 | mysql -u root -p
 #从日志开头,一直恢复到某一个位置点前结束
 mysqlbinlog --no-defaults --stop-position='位置点' 文件名 | mysql -u root -p
 ​#从指定的点开始 到指定的点结束
 mysqlbinlog --no-defaults --start-position='位置点'--stop-position='位置点' 文件名 | mysql -u root -p  

(2) 基于时间点的恢复方式

 #从某一个时间点开始恢复,一直到日志结尾
 mysqlbinlog --no-defaults --start-datetime='时间点' 文件名 | mysql -u root -p
#从日志开头,一直恢复到某一个时间点前结束
 mysqlbinlog --no-defaults --stop-datetime='时间点' 文件名 | mysql -u root -p
#从某一个时间点开始恢复,一直到某一个位置点前结束 
mysqlbinlog --no-defaults --start-datetime='起始时间点' --stop-datetime'结束时间点' 文件名 | mysql -u root -p

完全恢复加增量恢复的数据库备份脚本

 需求设计: 某公司上线了业务中 info表是核心数据表,为此业务在线时间中会对该表进行备份。要求每周二凌晨两点半(维护时间)进行一次完全备份,每天的凌晨一点对其进行增量备份。

(1)增量备份脚本编写

(2)完全备份的脚本 

(3)将两个编写的脚本添加到计划性任务中 

crontab -e
00 1 * * * /opt/addbak.sh
30 2 * * 2 /opt/backup.sh

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

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

相关文章

计算领域高质量科技期刊分级目录

最后需要文件的小伙伴可以私信我哦&#xff0c;也可以自行在官网下载

汽车网络安全渗透测试概述

目录 1.汽车网络安全法规概述 1.1 国外标准 1.2 国内标准 2.汽车网络安全威胁分析 2.1 汽车网络安全资产定义 2.2 汽车网络安全影响场景及评级示例 3.汽车网络安全渗透测试描述 3.1 参考法规 3.2 渗透测试内容 4.小结 1.汽车网络安全法规概述 近年来&#xff0c;汽车…

UE5——源码阅读——100——渲染——高清截图

创建事件&#xff0c;用于代码的调试 获取当前客户端所属的World 标记是否在进行重入绘制 是否开始缓存区可视化转存帧&#xff0c;主要针对请求屏幕截图或电影转存 判断是否需要高清截图 这下面这个函数执行高清截图 是否需要缓存区的可视化转存 判断是否开始渲染 如果…

总结Kibana DevTools如何操作elasticsearch的常用语句

一、操作es的工具 ElasticSearch HeadKibana DevToolsElasticHQ 本文主要是总结Kibana DevTools操作es的语句。 二、搜索文档 1、根据ID查询单个记录 GET /course_idx/_doc/course:202、term 匹配"name"字段的值为"6789999"的文档 类似于sql语句中的等…

自查看看自己转本复习中存在哪些问题

缺乏清晰、强力的奋斗目标 “我想考本科”只不过是一种笼统的泛化的模糊的专转本目标&#xff0c;对潜意识学习潜能的刺激力度不大。 专转本备考中&#xff0c;更需要一个恒久、量化、清晰、明确、具体的目标牵引自我潜意识去努力&#xff0c;克服学习中的重重困难。比如一所…

软件测试丨从外包到自研再到大厂——我是怎么从6k到25k的

功能测试&#xff1a;理论上说&#xff0c;该定位的测试人员应该是对业务需求理解最透彻的群体&#xff0c;专注于用户角度的测试&#xff0c;组织整体质量实践&#xff0c;分析测试运行结果&#xff0c;驱动测试执行。当然除了业务技能过硬&#xff0c;常用的测试工具也是必须…

VMware安装CentOS最小化开发环境导引

目录 一、概要 二、介绍 三、下载 四、安装 4.1 创建虚拟机 4.2 安装CentOS 五、配置网卡 六、配置本地安装源 七、安装软件 7.1 gcc/g 7.2 C的atomic库 7.3 java 7.4 Cmake 7.5 MariaDB客户端&#xff08;兼容mysql&#xff09; 八、用户配置文件.bash_profile…

Python小试牛刀:GUI(图形界面)实现计算器UI界面(三)

上一篇&#xff1a;Python小试牛刀&#xff1a;GUI&#xff08;图形界面&#xff09;实现计算器UI界面(二)-CSDN博客 回顾前两篇文章&#xff0c;第一篇文章主要实现了计算器UI界面如何布局&#xff0c;以及简单概述Python常用的GUI库。第二篇文章主要实现了计算器UI界面按钮组…

shiro-cve2016-4437漏洞复现

一、漏洞特征 Apache Shiro是一款开源强大且易用的Java安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用&#xff0c;同时也能提供健壮的安全性。 因为在反序列化时,不会对其进行过滤,所以如果传入恶意代码将会造成安全问题 在 1.2.4 版本前, 加…

Disk Drill v5.3.1313(数据恢复备份)

Disk Drill是一款功能强大的数据恢复软件&#xff0c;它可以帮助用户恢复已删除、丢失、格式化或损坏的文件&#xff0c;并支持多种存储设备&#xff0c;包括计算机硬盘驱动器、外部硬盘、USB闪存驱动器、内存卡和其他存储介质。它和很多的文件系统都兼容&#xff0c;比如&…

如何快速搭建本地书库结合内网穿透实现公网随时远程访问

Kindle中国电子书店停运不要慌&#xff0c;十分钟搭建自己的在线书库随时随地看小说&#xff01; 文章目录 Kindle中国电子书店停运不要慌&#xff0c;十分钟搭建自己的在线书库随时随地看小说&#xff01;1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网…

高压放大器在微机电工程中有哪些应用

高压放大器在微机电工程中有许多重要的应用。微机电工程是一种利用微电子加工技术制造微米级或纳米级机械结构并与电子元件集成的领域。高压放大器在MEMS领域发挥着关键的作用&#xff0c;下面将介绍几个高压放大器在MEMS工程中的应用。 MEMS驱动器&#xff1a;MEMS驱动器常用于…

CLIP Surgery论文阅读

CLIP Surgery for Better Explainability with Enhancement in Open-Vocabulary Tasks&#xff08;CVPR2023&#xff09; M norm ⁡ ( resize ⁡ ( reshape ⁡ ( F i ˉ ∥ F i ‾ ∥ 2 ⋅ ( F t ∥ F t ‾ ∥ 2 ) ⊤ ) ) ) M\operatorname{norm}\left(\operatorname{resize}\…

Linux认识协议

目录 TCP协议通信流程TCP三次握手数据传输过程四次挥手过程TCP 和 UDP 对比 认识协议协议的概念结构化数据的传输序列化和反序列化 网络版计算器服务端代码面向字节流 协议定制客户端代码编写代码测试守护进程守护进程创建 关于协议制定中使用现成方法实现 TCP协议通信流程 下…

华为H12-831题库

单选&#xff09;当IS-IS网络中有多条冗余链路时&#xff0c;可能会出现多条等价路由。关于IS-IS网络内的等价路由&#xff0c;以下哪个描述是错误的? A、当组网中存在的等价路由数量大于通过命令配置的数量&#xff0c;且这些路由优先级相同时&#xff0c;优选下一跳设备Sys…

三、机器学习基础知识:Python常用机器学习库(SKlearn)

文章目录 1、Scikit learn简介2、主要步骤3、数据预处理4、模型选择与算法评价 1、Scikit learn简介 Scikit learn 的简称是 SKlearn&#xff0c;专门提供了 Python 中实现机器学习的模块。Sklearn 是一个简单高效的数据分析算法工具&#xff0c;建立在 NumPy、SciPy和 Matplo…

深入研究Android内存

深入研究Android内存 Android应用程序开发时&#xff0c;我们始终意识到自己是Android硬件和操作系统的一部分。 从硬件角度来看&#xff0c;我们可以将Android手机分为不同级别。基本上&#xff0c;我们可以将它们分类为适用于低端硬件或API的入门级、中级和高级硬件-API手机…

Python+Selenium WebUI自动化框架 -- 基础操作封装

前言&#xff1a; 封装Selenium基本操作&#xff0c;让所有页面操作一键调用&#xff0c;让UI自动化框架脱离高成本、低效率时代&#xff0c;将用例的重用性贯彻到极致&#xff0c;让烦人的PO模型变得无所谓&#xff0c;让一个测试小白都能编写并实现自动化。 知识储备前提&a…

WordPress自适应图片主题源码CX-UDY主题模板 带会员积分下载系统

说明&#xff1a;该主题只适用于WordPress 4.8及以下版本&#xff0c;高版本暂不支持&#xff0c;介意的请勿下&#xff01; 下载地址 qnziyw点cn/cmsmb/wordpress/8084点html