mysql数据库备份原理(mysql备份方式有哪些)

本文主要介绍mysql数据库备份原理(什么是mysql备份方法),下面一起看看mysql数据库备份原理(什么是mysql备份方法)相关资讯。
本文介绍了mysql备份的原理,欢迎阅读。备份是数据安全的最后一道防线。在任何数据丢失的情况下,备份不一定能恢复100%的数据(取决于备份的时间),但至少可以减少损失。备份恢复有两个重要指标:恢复点目标(rpo)和恢复时间目标(rto)。能恢复到什么程度之前的重点,强调要恢复多久。本文主要讨论mysql的备份方案,重点介绍几种备份方法的原理,包括文件系统快照(lvm)、逻辑备份工具mysqldump、mydump、物理备份工具xtrabackup。同时将详细介绍几种方案的优缺点和可能存在的问题。进行冷备份最简单的方法是关闭mysql服务器,然后将所有文件复制并保存在data目录中。当你需要恢复和复制需要恢复的目录和机器时,这是一个方便的方法,但是对生产环境没有太大的影响,因为所有的机器都需要提供服务,甚至从机有时候也需要提供只读服务,所以关闭mysql和flower backup是不现实的。对应冷备份的概念是热备份。所谓热备份就是不影响mysql 外部服务。热备份是本文的重点。快照备份首先,热备份就是快照备份,是指通过文件系统支持的快照功能对数据库进行备份。备份的原理是将所有数据库文件放在同一个分区,然后对该分区进行快照工作。对于linux,它需要通过lvm(逻辑卷管理器),例如,它使用写入时复制来创建快照技术。innodb存储引擎整个卷的逻辑副本是一个类似于mvcc的数据库,但是lvm在数据库级别对文件系统层和mvcc进行快照,并且只支持innodb存储引擎,lvm有快照保留。如果原始数据卷发生更改,它会在任何更改之前被写入,以确保受影响的数据块会被复制到快照保留区。简而言之,所有数据一致的旧快照都会保存在快照区,几个数据库快照会很小。mysql,为了使用快照备份,需要将数据文件和日志文件放在一个逻辑卷上,然后对该卷进行快照备份,快照备份只能是本地的,所以如果本地磁盘损坏。快照备份更倾向于防止误操作。它可以快速将数据库恢复到快照生成时的时间点,然后结合二进制日志恢复到指定的时间点:逻辑备份冷快照备份由于其缺点在生产环境中很少使用,更多使用的是mysql的逻辑备份和物理备份工具。这部分主要是讲逻辑备份,官方mysql m。ysqldump逻辑备份工具虽然不错,但是备份线程比较慢。社区里有一个更好的逻辑备份工具mydumper。它的优势主要体现在多线程备份,速度更快。mysqldump mysqldump是备份和开发的两个关键参数:单事务:备份前,事务指令的执行开始得到一致的备份,只对innodb存储引擎有效。-主数据= 2:该站点主要用于记录一致的备份。为了理解工作原理,我们必须区分事务表(innodb)和非事务表(如表),因为备份过程是密切相关的。此外,到目前为止,我们可以 不要逃避myisam表,即使我们所有的业务表都是innodb,因为myisam表就是现在还在用的mysql库。备份的基本流程如下:1 .(带读锁的flush tables),全球禁止读写ii。打开快照,此时获得的快照(仅适用于innodb表)iii。备份非innodb表数据(*。frm,*我,*,mvd等。) 4.当备份非innodb表时,这个ftwrl锁被释放5。innodb表的数据是一个一个备份的。备份完成。在整个过程中,图片可以参考我的同事,但是他的画只考虑备份innodb表,即使是打开表的情况下。非innodb表已经备份,t1,t2,t3是innodb表的精华,5.6用来存分。每个表都将被备份到一个mdl锁中并被释放,从而避免了长时间的表锁。您可能想知道为什么以前备份innodb表时会释放一个锁。这实际上是使用了innodb引擎的mvcc机制。读取后可以打开快照,获取时间一致的数据,无论备份到事务结束(提交)需要多长时间。mydumper mydumper的原理类似于mysqldump原理。最大的不同是引入了多线程备份。每个备份线程备份表的一部分。当然,并行粒度可以达到行级多线程备份的目的。要解决的最大问题是如何保证一致备份,关键是ftwrl。对于非innodb表,需要在释放表备份之前完成锁,对于innodb表,我们需要确保多个线程可以获得一致性站点。这个操作也需要在持有全局锁的情况下完成,因为当时数据库没有被读写,保证了轨迹的一致性,所以基本流程如下:物理备份(xtrabackup)相比逻辑备份,物理备份更直接,使用查询提取数据中的所有记录,复制数据库文件和日志来完成备份,所以会更快。当然,开源的mydumper和官方最新的备份工具(5.7.11的mysqlpump)支持多线程备份,所以速度差异可能会进一步缩小。至少从目前的生产环境来看,还是用物理备份。因为xtrabackup支持备份innodb表,所以我们在实际生产环境中使用工具innobackupex,封装在这一层的xtrabackup和innobackupex脚本用于备份非innodb表,xtrabackup命令调用备份innodb表。innobackupex的基本流程如下:1 .打开重做日志复制线程,从最新的检查点复制重做日志。2。打开数据库文件复制线程,复制innodb表的数据。3.idb文件拷贝结束,通知ftwrl获得一致点4。备份非innodb表(系统表)和frm文件5。因为此时没有新的事务要提交,所以请等待重做日志复制完成。6。重做日志文件的最新副本完成后,此时的innodb和非innodb表数据相当于最新的7。获取binlog网站,此时数据库的状态是一致的。8。松开锁,备用侧。在逻辑和物理备份之前引入的改进xtrabackup,无论备份工具如何,它们都强烈依赖ftwrl,以便获得一致的网站。这个锁是非常致命的,因为整个数据库可以 本质上不提供写服务是因为持有锁的时间。另外,由于ftwrl需要关闭表,如果有大的查询,就会导致ftwrl等等,从而长时间阻塞dml。即使是库,也有sql线程,来自于主库的更新,当它被全局锁定时,会导致主库的延迟。从前面的分析来看,ftwrl的锁时间不是innodb表数据量的主要因素。如果非innodb表中有大量数据,备份会很慢,锁会花很长时间。即使是innodb表,由于mysql数据库系统表的存在,也会被锁定一段时间。为了解决这个问题,mysql服务器层的percona公司对备份的锁进行了改进,引入了locktables backup命令来备份非innodb表数据;通过锁定binlog备份来获得这个网站的一致性,最大限度的减少数据库的备份服务带来的损害,因为。看看两个锁和ftwrl的区别:备份表角色:备份数据1。禁止更新非innodb表2。禁止所有表的ddl优化点:1。不会被大型查询阻塞(关闭表)2。不可抗拒的阅读和innodb表格更新。这一点非常重要。所有业务表innodb和dml根本没有损坏的备份过程。解锁表锁定binlog备份以获得一致性站点。1。禁止更新对位法的操作做优化点:1。直到binlog写入允许ddl和更新。unlockbinlog是本文的全部内容,希望能对大家有所帮助。
了解更多mysql数据库备份原理(什么是mysql备份方法)相关内容请关注本站点。