数据库的备份和恢复

数据库的备份和恢复:

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

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

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

备份的需求:

  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

相关推荐
Acrelhuang19 分钟前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
十叶知秋1 小时前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
瓜牛_gn3 小时前
mysql特性
数据库·mysql
奶糖趣多多4 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt5 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧7 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Channing Lewis8 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
毕业设计制作和分享9 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil279 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk10 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql