数据库的备份和恢复

数据库的备份和恢复:

备份:完全备份,增量备份

完全备份:将整个数据库完整的进行备份

增量备份:在完全备份的基础之上,对后续新增的内容进行备份

备份的需求:

  1. 在生产环境之中,数据的安全至关重要,任何数据的丢失都可能产生非常严重的后果
  2. 数据为什么会丢失,程序错误,运算错误,磁盘故障,不可预期的时间,以及人为操作,所以备份非常重要

备份的方法:

冷备份:关机备份,停止mysql服务,然后进行备份

热备份:开机备份,无须关闭mysql服务,进行别发

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

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

物理备份:一般采用完全备份,对整个数据库进行完整的打包备份

优点:操作简单

缺点:数据库文件占用量很大的,占用空间太大,备份和恢复的时间很长,而且需要暂定数据库服务,打包备份最好是把服务关掉,避免新的数据进入,被覆盖,也可能导致恢复失败

如何进行物理备份:

演示前提:关闭数据库服务

查看需要备份的内容

打包目录

#压缩备份 tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/

模拟删库

解压到当前目录

#解压恢复 tar Jxvf /opt/mysql_all_2020-11-22.tar.xz

模拟破坏

恢复

检测

数据迁移:

远程复制的方式

注意事项:

热备份当中的逻辑备份

这是mysql自带的工具:

Mysqldump

备份单个库:

Mysqldump -u root -p --databases 库名 > /opt/库名.sql

备份多个库:

Mysqldump -u root -p --databases ku ku1> /opt/ku.sql

备份全部库:

Mysqldump -u root -p --all-databases > /opt/ku.sql

补充命令:

mysql -u root -p123456 -e 'show databases;'

-e:指定连接mysql之后执行完命令,自动退出。

逻辑删除,可恢复表中的内容

演示备份单个:

恢复

查看

备份多个库

删库

多个库一起恢复:

备份全部库:

删库

恢复

怎么样只恢复表:

先备份

删库

恢复单个表(指定库名进行恢复)

恢复多个表

可以用sql语句的方式,直接实现两个数据库的迁移

总结:

物理冷备份和物理热备份

特点:操作简单

缺点:数据量大,占用的备份空间比较大

Mysqldump:这是mysql自带的备份文件的命令

特点:方便,简单,但是只能基于逻辑上的表结构和数据恢复,物理删除之后再用逻辑恢复会报错,也可以作为数据迁移,必然也会占用大空间,比较物理备份,相对来说占的空间小一些

演示了全量备份,库,表

增量备份:

Mysqldump也支持增量备份,没有重复数据,备份量小,时间短

Mysql增量备份恢复表数据期间,表会锁定

缺点:备份时锁表必然会影响业务,数据超过10G以后,耗时会比较长,导致服物不可用

增量备份的过程:

  1. mysql提供的二进制日志间间接的实现增量备份

二进制文件在怎么来,修改配置文件来

Mysql二进制日志记录格式有三种:

  1. STATEMENT:基于sql语句

记录修改的sql语句,高并发情况下,记录sql语句时候的顺序可能会出错,恢复数据时可能会导致丢失效率和误差,效率比较高

  1. ROW:基于行

精准记录每一行的数据,准确率高,恢复的时效炉比较低

  1. MIXED:既可以根据sql语句,也可以根据行

在正常情况下使用的是STAEMENT,一旦发生高并发,会智能自动切换到ROW行,

打开这两个服务:

log-bin=mysql-bin

binlog_format=MIXED

查看日志文件

查看表信息

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

刷新命令:(会出现新的断点)

断点:刷新之后,后续的文件会保存在刷新过的文件当中,再次刷新之后,后续的内容会保存在所在断点当中,操作都在后续断点钟操作

例如:

刷新断点

删除一行

再打一个断点,然后查看断点2,里面并没有删除的显示

查看断点1,在断点1当中

如何恢复:(在断点1中恢复)

位置恢复和时间恢复

基于位置点来进行恢复

从某一个位置点开始,恢复到最后

格式:mysqlbinlog --no-defaults --start-position='位置点' mysql-bin.000002 | mysql -u root -p

从开头,一致恢复到某个位置

格式: mysqlbinlog --no-defaults --stop-position='735' mysql-bin.000001 | mysql -u root -p

从指定点---指定点结束

格式:mysqlbinlog --no-defaults --start-position='735' --stop-position='910' mysql-bin.000001 | mysql -u root -p

基于时间点恢复:

命令:

  1. 从某个节点开始:

格式:mysqlbinlog --no-defalult--start-datetime='时间点'文件名|mysql -u root -p

2.从开头到指定结尾

格式:mysqlbinlog --no-defalult--stop-datetime='时间点'文件名|mysql -u root -p

  1. 指定时间范围

格式:mysqlbinlog --no-defalult--start-datetime='时间点' --stop-datetome='时间点' 文件名|mysql -u root -p

总结:

在生产中,通过binlog进行增量恢复是非常好用的方法

我们只需要对binlog文件进行备份,随时可以进行备份和恢复

如何打开mysql的默认日志:

查看错误日志

通用访问日志:

慢查询日志:

工具查看:

命令:

yum -y install xz

#压缩备份 tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/

#解压恢复 tar Jxvf /opt/mysql_all_2020-11-22.tar.xz

相关推荐
云和数据.ChenGuang34 分钟前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi1 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据2 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi3 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀3 小时前
Redis梳理
数据库·redis·缓存
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天4 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺4 小时前
分布式系统架构:服务容错
数据库·架构
独行soc5 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘