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
来源:CSDN
作者:QwQNightmare
链接:https://blog.csdn.net/QwQNightmare/article/details/103892580