MySQL数据备份
参考:
学会4种备份MySQL数据库(基本备份方面没问题了)
https://www.cnblogs.com/SQL888/p/5751631.html
数据备份类型
三、按照业务划分
1 完全备份:
备份整个数据集( 即整个数据库 )
优点:数据还原快。这种备份方式最大的好处就是只要最近的一次完全备份的数据,就可以恢复丢失的数据。
缺点:备份数据存在大量的重复信息,浪费空间
由于每次需要备份的数据量相当大,因此备份所需时间较长,做不到实时备份
2 差异备份:
备份自上一次完全备份后有变化的数据
原理:差异备份是针对上一次完全备份;备份上次完全备份后变化的文件。每次的差异备份之间没有关联。所以,差异备份的大小,会随着时间而不断增加
复原方法:如果要复原整个系统,那么您只要先复原完全备份,再复原最后一次的差异备份即可。
特点: 也比较浪费空间、还原比增量备份简单。
3 增量备份:
备份自上一次备份(包含完全备份、差异备份、增量备份)之后有变化的数据
原理:增量备份相当于是在上次完全备份后对后续的修改做累积的备份,以后每次的备份只需备份与前一次相比有增加或修改的文件。每次的备份都有关联。
复原方法:如果您要复原整个档案系统,那就得先复原最近一次的完整备份,然后沿着从完全备份到依次增量备份的时间顺序逐个反推恢复
特点: 节约空间,备份速度快、还原麻烦 ,需要按照时间对每次的增量备份进行恢复
差异备份和增量备份不同点
差异备份是针对上一次完全备份;备份上次完全备份后变化的文件。每次的差异备份之间没有关联
增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。每次的增量备份之间是有关联的
不同备份类型组合应用的示例
(1)完全备份与差异备份
以每周数据备份计划为例,我们可以在星期一进行完全备份,在星期二至星期五进行差异备份。如果在星期五数据被破坏了,则你只需要还原星期一完全的备份和星期四的差异备份。
这种策略备份数据需要较多的时间,但还原数据使用较少的时间。
(2)完全备份与增量备份
以每周数据备份为例,在星期一进行完全备份,在星期二至星期五进行增量备份。如果在星期五数据被破坏了,则你需要还原星期一正常的备份和从星期二至星期五的所有增量备份。
这种策略备份数据需要较少的时间,但还原数据使用较多的时间。
MySQL备份数据的方法
https://blog.51cto.com/14199566/2392066
一、按照数据库的运行状态分类:
热备份:当数据库进行备份时, 数据库的读写操作均不是受影响
温备份:当数据库进行备份时, 数据库的读操作可以执行, 但是不能执行写操作
冷备份:当数据库进行备份时, 数据库不能进行读写操作, 即数据库要下线
用一句话概括冷备,就是把数据库服务,比如MySQL,Oracle停下来,然后使用拷贝、打包或者压缩命令对数据目录进行备份。
注意:
冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。而且在恢复后一定要把数据库文件的属组和属主改为mysql。
Linux系统使用cp命令在数据库运行阶段直接拷贝
windows下可以在mysql运行状态下直接拷贝data目录,是可行的,但是如果拷贝的时候正好有事物等操作,备份的数据是不完整的。
以上图片摘自:
https://wenku.baidu.com/view/3aa85359c950ad02de80d4d8d15abe23482f034d.html
https://wenku.baidu.com/view/410f48a0a4e9856a561252d380eb6294dd8822e6.html
所以直接拷贝数据库文件 这种冷备份的时候最好关闭数据库或者锁定数据表。a、首先把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入 mysql>FLUSH TABLES WITH READ LOCK; b、使用tar或cp等命令备份数据库文件,这里使用tar tar zcvf /backup/mysql_$(date “+%Y%m%d”).tar.gz /var/lib/mysql c、备份完后解锁数据表 mysql> unlock tables; 这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。需要注意,对于 Innodb 引擎的表来说,还需要备份其日志文件,即 ib_logfile* 文件。因为当 Innodb 表损坏时,就可以依靠这些日志文件来恢复。
存储引擎支持情况:
MyISAM 不支持热备
热备 ×
温备 √
冷备 √
InnoDB
热备 √
温备 √
冷备 √
二、按照备份方式分类:
物理备份一般就是通过tar,cp等命令直接打包复制数据库的数据文件达到备份的效果 (直接拷贝文件)
逻辑备份一般就是通过特定工具从数据库中导出数据并另存备份(逻辑备份会丢失数据精度)(如使用工具导出SQL文件,如mysqldump)
备份的内容:
l 数据
l 二进制日志, InnoDB事务日志
l 代码(存储过程、存储函数、触发器、事件调度器)
l 服务器配置文件
备份工具
mysqldump : 逻辑备份工具,可以生成一个重现创建原始数据库和表的SQL语句, 适用于所有的存储引擎, 支持温备、完全备份、部分备份、对于InnoDB存储引擎支持热备
cp, tar 等归档复制工具: 物理备份工具, 适用于所有的存储引擎, 冷备、完全备份、部分备份 。
lvm2 snapshot: 几乎热备, 借助文件系统管理工具进行备份
mysqlhotcopy: 几乎冷备, 仅支持MyISAM存储引擎
xtrabackup: 一款非常强大的InnoDB/XtraDB热备工具, 支持完全备份、增量备份, 备份过程不会打断正在执行的事务(无需锁表),由percona提供
备份策略
l 直接cp,tar复制数据库文件
l mysqldump+复制BIN LOGS
l lvm2快照(对数据库目录进行快照)+复制BIN LOGS
l xtrabackup
不同的场景
1 如果数据量较小, 可以使用第一种方式, 直接复制数据库文件
2 如果数据量还行, 可以使用第二种方式, 先使用mysqldump对数据库进行完全备份, 然后定期备份BINLOG(二进制日志)达到增量备份的效果.默认情况下不开启二进制日志,开启时需要修改my.ini配置文件
3 如果数据量一般, 而又不过分影响业务运行, 可以使用第三种方式, 使用lvm2的快照对数据文件进行备份, 而后定期备份BINARY LOG达到增量备份的效果
4 如果数据量很大, 而又不过分影响业务运行, 可以使用第四种方式, 使用xtrabackup进行完全备份后, 定期使用xtrabackup进行增量备份或差异备份
使用xtrabackup备份InnoDB引擎的数据能够发挥其最大功效, 并且InnoDB的每一张表必须使用单独的表空间, 我们需要在配置文件中添加 innodb_file_per_table = ON 来开启
优点:
1备份过程快速、可靠;
2备份过程不会打断正在执行的事务;
3能够基于压缩等功能节约磁盘空间和流量;
4自动实现备份检验;
5还原速度快;
总结
备份方法 | 备份速度 | 恢复速度 | 便捷性 | 功能 | 一般用于 |
---|---|---|---|---|---|
cp | 快 | 快 | 一般、灵活性低 | 很弱 | 少量数据备份 |
mysqldump | 慢 | 慢 | 一般、可无视存储引擎的差异 | 一般 | 中小型数据量的备份 |
lvm2快照 | 快 | 快 | 一般、支持几乎热备、速度快 | 一般 | 中小型数据量的备份 |
xtrabackup | 较快 | 较快 | 实现innodb热备、对存储引擎有要求 | 强大 | 较大规模的备份 |
主从复制备份
可以实时备份,安全性最高,备份最及时