当前位置:网站首页>数据库备份(Mysql)
数据库备份(Mysql)
2022-06-11 16:30:00 【peach桃】
数据库备份(Mysql):
衡量数据备份的两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO)
恢复点目标(RPO):重点关注能恢复到什么程度
恢复时间目标(RTO):重点关注恢复需要多长时间
备份方式:文件系统快照(LVM),逻辑备份工具Mysqldump,Mydumper,以及物理备份工具Xtrabackup
冷备份:
关闭MySQL服务器,然后将data目录下面的所有文件进行拷贝保存,需要恢复时,则将目录拷贝到需要恢复的机器即可。这种方式确实方便,但是在生产环境中基本没什么作用。因为所有的机器都是要提供服务的,即使是Slave有时候也需要提供只读服务,所以关闭MySQL停服备份是不现实的。与冷备份相对应的一个概念是热备份,所谓热备份是在不影响MySQL对外服务的情况下,进行备份。
快照备份:
首先要介绍的热备份是快照备份,快照备份是指通过文件系统支持的快照功能对数据库进行备份。备份的原理是将所有的数据库文件放在同一分区中,然后对该分区执行快照工作,对于Linux而言,需要通过LVM(LogicalVolumn Manager)来实现。LVM使用写时复制(copy-on-write)技术来创建快照。例如,对整个卷的某个瞬间的逻辑副本,类似于数据库中的innodb存储引擎的MVCC,只不过LVM的快照在文件系统层面,而MVCC在数据库层面,而且仅支持innodb存储引擎。LVM有一个快照预留区域,如果原始卷数据有变化时,LVM保证在任何变更写入之前,会复制受影响块到快照预留区域。简单来说,快照区域内保留了快照点开始时的一致的所有old数据。对于更新很少的数据库,快照也会非常小。对于MySQL而言,为了使用快照备份,需要将数据文件,日志文件都放在一个逻辑卷中,然后对该卷快照备份即可。由于快照备份,只能本地,因此,如果本地的磁盘损坏,则快照也就损坏了。快照备份更偏向于对误操作防范,可以将数据库迅速恢复到快照产生的时间点,然后结合二进制日志可以恢复到指定的时间点。
逻辑备份:
冷备份和快照备份由于其弊端在生产环境中很少使用,使用更多是MySQL自带的逻辑备份和物理备份工具,这节主要讲逻辑备份,MySQL官方提供了Mysqldump逻辑备份工具,虽然已经足够好,但存在单线程备份慢的问题。在社区提供了更优秀的逻辑备份工具mydumper,它的优势主要体现在多线程备份,备份速度更快。
Mysqldump
理解Mysqldump工作原理,一定要将事务表(innodb)和非事务表(比如myisam)区别对待,因为备份的流程与此息息相关。而且,到目前为止,我们也无法规避myisam表,即使我们的所有业务表都是innodb,因为mysql库中系统表仍然采用的myisam表。备份的基本流程如下:
1.调用FTWRL(flush tableswith read lock),全局禁止读写
2.开启快照读,获取此时的快照(仅对innodb表起作用)
3.备份非innodb表数据(*.frm,*.myi,*.myd等)
4.非innodb表备份完毕后,释放FTWRL锁
5.逐一备份innodb表数据
6.备份完成。
Mydumper
·······Mydumper原理与Mysqldump原理类似,最大的区别是引入了多线程备份,每个备份线程备份一部分表,当然并发粒度可以到行级,达到多线程备份的目的。这里要解决最大一个问题是,如何保证备份的一致性,其实关键还是在于FTWRL。对于非innodb表,在释放锁之前,需要将表备份完成。对于innodb表,需要确保多个线程都能拿到一致性位点,这个动作同样要在持有全局锁期间完成,因为此时数据库没有读写,可以保证位点一致。
物理备份(Xtrabackup):
相对于逻辑备份利用查询提取数据中的所有记录,物理备份更直接,拷贝数据库文件和日志来完成备份,因此速度会更快。当然,无论是开源的Mydumper还是官方最新的备份工具(5.7.11的mysqlpump)都支持了多线程备份,所以速度差异可能会进一步缩小,至少从目前生产环境来看,物理备份使用还是比较多的。由于Xtrabackup支持备份innodb表,实际生产环境中我们使用的工具是innobackupex,它是对xtrabackup的一层封装。innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,innobackupex的基本流程如下:
1.开启redo日志拷贝线程,从最新的检查点开始顺序拷贝redo日志;
2.开启idb文件拷贝线程,拷贝innodb表的数据
3.idb文件拷贝结束,通知调用FTWRL,获取一致性位点
4.备份非innodb表(系统表)和frm文件
5.由于此时没有新事务提交,等待redo日志拷贝完成
6.最新的redo日志拷贝完成后,相当于此时的innodb表和非innodb表数据都是最新的
7.获取binlog位点,此时数据库的状态是一致的。
8.释放锁,备份结束。
边栏推荐
- Student website template brown cake dessert website design - brown cake dessert shop (4 pages) gourmet dessert website production final assignment finished product_ Fresh fruit web design final assign
- List和Set存取元素的差异
- 数据库全量SQL分析与审计系统性能优化之旅
- Can I eat meat during weight loss? Will you get fat?
- 2022G1工业锅炉司炉考题及模拟考试
- leetcode785. 判断二分图(中等)
- Interview high frequency algorithm question --- longest palindrome substring
- Detailed explanation of MySQL binlog log and master-slave replication
- After reading the book reading methods
- 2022年R1快开门式压力容器操作考试题库及模拟考试
猜你喜欢

Heartless sword English Chinese bilingual poem 001 Spring outing

leetcode785. 判断二分图(中等)

从0到1了解Prometheus

瑞吉外卖项目(三)员工管理业务开发

Pytest test framework Basics

Student website template brown cake dessert website design - brown cake dessert shop (4 pages) gourmet dessert website production final assignment finished product_ Fresh fruit web design final assign

leetcode417. Pacific Atlantic current problems (medium)

solr(一)solr的安装及权限控制

After reading the book reading methods

Production problem troubleshooting reference
随机推荐
利用 MATLAB 和 DCRAW 处理数码相机 RAW 文件的完整流程
JVM 的组成
LeetCode——42. 接雨水(双指针)
CLP Jinxin helps Rizhao bank put into operation its new financial ecological network
1267_ FreeRTOS starts the first task interface prvportstartfirsttask implementation analysis
List和Set存取元素的差异
[LeetCode每日一题] |686.重复叠加字符串匹配
Rdkit installation
2022 simulated examination question bank and simulated examination for crane driver (limited to bridge crane)
After reading the book reading methods
面试高频算法题---最长回文子串
How to optimize the performance of compose? Find the answer through "underlying principles" | developers say · dtalk
为什么芯片设计也需要「匠人精神」?
药物评价指标
[learn FPGA programming from scratch -18]: quick start chapter - operation steps 2-6- VerilogHDL sequential circuit syntax analysis (taking the counter as an example)
09-最小生成树 公路村村通
Laravel 8 realizes database backup through task scheduling
What is a generic? Why use generics? How do I use generics? What about packaging?
Detailed explanation of the functions of list and dict data types
什么是rs邮票纸?