数据库的备份和恢复

数据库的备份和恢复:

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

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

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

备份的需求:

  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

相关推荐
cyt涛1 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Rookie也要加油2 小时前
01_SQLite
数据库·sqlite
liuxin334455662 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。3 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec3 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa3 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke3 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D3 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录3 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.4 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构