mysql数据库备份与恢复

折月煮酒 提交于 2020-01-24 07:33:12

mysql数据库备份与恢复

在日常的生产环境中,数据库中的数据存在丢失的风险,为了避免数据的丢失导致巨大的损失,因时常对数据库里的数据进行备份。而备份的方法主要有三种:完全备份、差异备份和增量备份。造成数据库中的数据丢失的情况也分好几种:程序发生错误、人为的操作失误、计算机宕机、磁盘损坏、天灾等等都有可能造成数据库中的数据丢失

一、数据库的备份

数据库的备份分类

备份数据库中的数据我们一般可以分为:物理备份和逻辑备份。

物理备份:顾名思义也就是说将数据库中的所有数据进行打包备份:

tar Jcvf 生成压缩包的路径/名称-$(date +F%).tar.xz /usr/local/mysql/data

物理备份又分为:热备份与冷备份。热备份即在数据库运行的状态进行数据备份,其主要依赖于日志文件。而冷备份是在数据库关闭的时候进行备份。

逻辑备份:是对数据库中的表和库进行备份。

从另一个角度来看备份又分为:完全备份、差异备份与增量备份。

完全备份:是对数据库中的所有数据进行完整的备份。

差异备份:是指备份从上一次完全备份结束后修改过的文件。

增量备份:是指备份在上一次完全备份或增量备份后修改过的文件。

差异备份和增量备份定义类似需要加以区分。

完全备份的优点在于:数据的安全性高。缺点是:冗余数据太多、磁盘空间利用率太低、恢复时间太长等。

增量备份的优点在于:磁盘空间利用率高、恢复效率高。 缺点是:备份数据不安全。

差异性备份的优缺点介于完全备份和增量备份之间。

数据库增量备份数据与恢复

数据备份

备份一个数据库中的所有的表:mysqldump -u root -p 数据库名称 > 备份脚本路径.sql

在这里插入图片描述

对数据库中一张表进行备份: mysqldump -uroot -p 数据库名称 表名称 > 备份路径.sql

在这里插入图片描述
查看备份脚本其中是sql语句为了恢复其中的数据。
在这里插入图片描述

备份多个数据库:mysqldump -u root -p --databases 数据库名称 > 备份脚本路径.sql
基于所有数据库的完整性备份: mysqldump -uroot -p --opt --all-databases > 备份路径.sql

在这里插入图片描述

备份数据库中一张表的结构:mysqldump -uroot -p -d 数据库名称 表名称 > 备份路径.sql

在这里插入图片描述

数据恢复

mysql数据恢复是恢复数据库中的表,所以为了可以恢复表中的信息一般需要先创建好数据库在恢复表。
数据恢复的方法有两种:
1)在mysql中使用source命令恢复。

source 备份脚本的绝对路径;

先删除数据库中的表
在这里插入图片描述
接着使用source命令恢复数据库中的表
在这里插入图片描述
renshi表中的数据已经还原了。
在这里插入图片描述

创建一个新的数据库
在这里插入图片描述
恢复之前的表
在这里插入图片描述
表中信息又恢复了。
在这里插入图片描述
这说明备份的表可以在任何数据库中恢复。

2)Linux系统命令恢复

mysql -uroot -p 数据库名称 < 备份脚本绝对路径

这个命令不需要开启数据库,只需要在Linux系统终端上输入即可。
在这里插入图片描述

数据增量恢复

1.首先要开启二进制日志功能,在主配置文件中添加,完成后重启服务。
在这里插入图片描述
这时就可以在data文件夹下看到日志文件的生成。
在这里插入图片描述
以后的操作都将记录在次日志文件中。
2.进行一次完全备份。
在这里插入图片描述
3.进行日志更新,将之前的所有操作记录在000001的日志文件中。
在这里插入图片描述
此时会产生一个000002空的日志文件记录更新后的操作记录。
4.进入数据库进行错误操作。
首先进行一个正确操作
添加一个人名id为4
在这里插入图片描述
在这里插入图片描述
修改id为4的人名
在这里插入图片描述
在进行一次正确的操作。
在这里插入图片描述
5.进行断点恢复,恢复到4号name为xiaoming时,5号也能正常添加。也就是说跳过了错误操作将4号改名这一操作。
6.再次更新日志将001和002之间的操作记录在002日志文件中。
在这里插入图片描述
删除原来的表。
在这里插入图片描述
把之前的完全性备份进行恢复。
在这里插入图片描述
进入数据库查看,最原始的数据已经恢复。
在这里插入图片描述
查看上一个正确操作结束的时间点或位置作为还原命令的结束点。并且将下一个正确操作的起始点做为开始还原。
在这里插入图片描述
先还原发生错误操作之前的命令。
在这里插入图片描述
在这里插入图片描述
在恢复错误操作之后的命令,即跳过了错误操作。
在这里插入图片描述
在这里插入图片描述
断点恢复除了从位置信息方面恢复,也可以从时间信息方面恢复。

#从时间节点断点恢复

#记录错误操作的上一个时间节点   ----》 --stop-datetime 

#记录错误操作后第一个正确操作的时间节点  ----》 --start-datetime

#开始恢复到错误操作之前
mysqlbinlog --no-defaults --stop-datetime='Y-M-D time' 操作日志的绝对路径 | mysql -uroot -p

#恢复跳过错误操作之后的正确操作
mysqlbinlog --no-defaults --start-datetime='Y-M-D time' 操作日志的绝对路径 | mysql -uroot -p

#恢复某个时间段的操作
mysqlbinlog --no-defaults --start-datetime='Y-M-D time' --stop-datetime='Y-M-D time' 操作日志的绝对路径 | mysql -uroot -p
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!