位置: 编程技术 - 正文

MySQL备份原理详解(mysql 备份方式)

编辑:rootadmin

推荐整理分享MySQL备份原理详解(mysql 备份方式),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql 备份方案,mysql备份工具有哪些,mysql常用备份方案,mysql的备份方式和命令,mysql 备份原理,mysql备份数据,mysql 备份原理,mysql数据库备份原理,内容如对您有帮助,希望把文章链接给更多的朋友!

本文为大家介绍了MySQL备份原理,欢迎大家阅读。

备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间。这篇文章主要讨论MySQL的备份方案,重点介绍几种备份方式的原理,包括文件系统快照(LVM),逻辑备份工具Mysqldump,Mydumper,以及物理备份工具Xtrabackup,同时会详细讲解几种方案的优缺点,以及可能遇到的问题。

冷备份

最简单的备份方式就是,关闭MySQL服务器,然后将data目录下面的所有文件进行拷贝保存,需要恢复时,则将目录拷贝到需要恢复的机器即可。这种方式确实方便,但是在生产环境中基本没什么作用。因为所有的机器都是要提供服务的,即使是Slave有时候也需要提供只读服务,所以关闭MySQL停服备份是不现实的。与冷备份相对应的一个概念是热备份,所谓热备份是在不影响MySQL对外服务的情况下,进行备份,热备份是这篇文章讨论的重点。

快照备份

首先要介绍的热备份是快照备份,快照备份是指通过文件系统支持的快照功能对数据库进行备份。备份的原理是将所有的数据库文件放在同一分区中,然后对该分区执行快照工作,对于Linux而言,需要通过LVM(Logical Volumn Manager)来实现。LVM使用写时复制(copy-on-write)技术来创建快照,例如,对整个卷的某个瞬间的逻辑副本,类似于数据库中的innodb存储引擎的MVCC,只不过LVM的快照在文件系统层面,而MVCC在数据库层面,而且仅支持innodb存储引擎。LVM有一个快照预留区域,如果原始卷数据有变化时,LVM保证在任何变更写入之前,会复制受影响块到快照预留区域。简单来说,快照区域内保留了快照点开始时的一致的所有old数据。对于更新很少的数据库,快照也会非常小。对于MySQL而言,为了使用快照备份,需要将数据文件,日志文件都放在一个逻辑卷中,然后对该卷快照备份即可。由于快照备份,只能本地,因此,如果本地的磁盘损坏,则快照也就损坏了。快照备份更偏向于对误操作防范,可以将数据库迅速恢复到快照产生的时间点,然后结合二进制日志可以恢复到指定的时间点。基本原理如下图:

逻辑备份

冷备份和快照备份由于其弊端在生产环境中很少使用,使用更多是MySQL自带的逻辑备份和物理备份工具,这节主要讲逻辑备份,MySQL官方提供了Mysqldump逻辑备份工具,虽然已经足够好,但存在单线程备份慢的问题。在社区提供了更优秀的逻辑备份工具mydumper,它的优势主要体现在多线程备份,备份速度更快。

MySQL备份原理详解(mysql 备份方式)

MysqldumpMysqldump用于备份,不得不提两个关键的参数:--single-transaction:在开始备份前,执行start transaction命令,以此来获取一致性备份,该参数仅对innodb存储引擎有效。--master-data=2:主要用于记录一致性备份的位点。理解Mysqldump工作原理,一定要将事务表(innodb)和非事务表(比如myisam)区别对待,因为备份的流程与此息息相关。而且,到目前为止,我们也无法规避myisam表,即使我们的所有业务表都是innodb,因为mysql库中系统表仍然采用的myisam表。

备份的基本流程如下:

1.调用FTWRL(flush tables with read lock),全局禁止读写2.开启快照读,获取此时的快照(仅对innodb表起作用)3.备份非innodb表数据(*.frm,*.myi,*.myd等)4.非innodb表备份完毕后,释放FTWRL锁5.逐一备份innodb表数据6.备份完成。

整个过程,可以参考我同事的一张图,但他的这张图只考虑innodb表的备份情况,实际上在unlock tables执行完毕之前,非innodb表已经备份完毕,后面的t1,t2和t3实质都是innodb表,而且5.6的mysqldump利用保存点机制,每备份完一个表就将一个表上的MDL锁释放,避免对一张表锁更长的时间。

大家可能有一个疑问,为啥备份innodb表之前,就已经将锁释放掉了,这实际上是利用了innodb引擎的MVCC机制,开启快照读后,就能获取那个时间的一致的数据,无论需要备份多长时间,直到整个事务结束(commit)为止。

MydumperMydumper原理与Mysqldump原理类似,最大的区别是引入了多线程备份,每个备份线程备份一部分表,当然并发粒度可以到行级,达到多线程备份的目的。这里要解决最大一个问题是,如何保证备份的一致性,其实关键还是在于FTWRL。对于非innodb表,在释放锁之前,需要将表备份完成。对于innodb表,需要确保多个线程都能拿到一致性位点,这个动作同样要在持有全局锁期间完成,因为此时数据库没有读写,可以保证位点一致。所以基本流程如下:

物理备份(Xtrabackup)相对于逻辑备份利用查询提取数据中的所有记录,物理备份更直接,拷贝数据库文件和日志来完成备份,因此速度会更快。当然,无论是开源的Mydumper还是官方最新的备份工具(5.7.的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.释放锁,备份结束。

Xtrabackup的改进从前面介绍的逻辑备份和物理备份来看,无论是哪种备份工具,为了获取一致性位点,都强依赖于FTWRL。这个锁杀伤力非常大,因为持有锁的这段时间,整个数据库实质上不能对外提供写服务的。此外,由于FTWRL需要关闭表,如有大查询,会导致FTWRL等待,进而导致DML堵塞的时间变长。即使是备库,也有SQL线程在复制来源于主库的更新,上全局锁时,会导致主备库延迟。从前面的分析来看,FTWRL这把锁持有的时间主要与非innodb表的数据量有关,如果非innodb表数据量很大,备份很慢,那么持有锁的时间就会很长。即使全部是innodb表,也会因为有mysql库系统表存在,导致会锁一定的时间。为了解决这个问题,Percona公司对Mysql的Server层做了改进,引入了BACKUP LOCK,具体而言,通过"LOCKTABLES FOR BACKUP"命令来备份非innodb表数据;通过"LOCK BINLOG FOR BACKUP"来获取一致性位点,尽量减少因为数据库备份带来的服务受损。我们看看采用这两个锁与FTWRL的区别:

LOCK TABLES FOR BACKUP作用:备份数据1.禁止非innodb表更新2.禁止所有表的ddl优化点:1.不会被大查询堵塞(关闭表)2.不会堵塞innodb表的读取和更新,这点非常重要,对于业务表全部是innodb的情况,则备份过程中DML完全不受损UNLOCKTABLES

LOCK BINLOG FOR BACKUP作用:获取一致性位点。1.禁止对位点更新的操作优化点:1.允许DDl和更新,直到写binlog为止。UNLOCKBINLOG

标签: mysql 备份方式

本文链接地址:https://www.jiuchutong.com/biancheng/347220.html 转载请保留说明!

上一篇:CentOS 6.5下yum安装 MySQL-5.5全过程图文教程(centos6.2安装)

下一篇:MySQL数据库分区功能的使用教程(mysql数据库分区查询)

  • 滞留票有什么影响
  • 解除劳动一次性补偿金怎么记账
  • 未达起征点增值税能否开票
  • 百旺税控盘汇总表怎么看
  • 进口货物再出口 增值税处理
  • 资产负债表税务报表中其他应收款可以为负数吗
  • 对公账户卡号是私人账号
  • 房屋租赁收入还需要缴纳附加税吗
  • 当月发票不够用领用了下个月,下个月还能再领吗
  • 报关单和发票不符怎么办
  • 简易征收的项目是否可以实行30万免税
  • 研发样机是什么
  • 原材料投资入股协议约定价值公允价值
  • 非税收入通用票据需要盖章吗
  • 税局代增值税专用发票 需要带什么
  • 营改增挂靠工程项目账务处理
  • 会计所得税和税法所得税
  • 内部员工购买公司产品
  • 电脑美式键盘怎么设置
  • 产品入库的业务流程
  • 一般纳税人存货入账价值
  • 银行承兑汇票的付款期限
  • 公司运输车辆加油会计分录
  • 发现以前年度多交增值税怎么申报
  • 如何把电脑上锁屏密码
  • php ftp功能
  • 网络看不到局域网图标
  • 税收滞纳金可以抵税吗
  • emsm是什么意思
  • php修改图片尺寸
  • 薄雾笼罩怎么写
  • php如何判断用户是否在线
  • 利润表没有本月金额只有本年累计可以吗
  • PYTHON中使用什么符号表示单行注释
  • 房企预缴增值税
  • 预交的企业所得税需要计提吗?
  • 辞退员工补偿金怎么计算
  • 去年的电费能查到吗
  • 一年的房租费摊销的账务处理
  • 建设工程的材料质量检测由谁负责
  • sql server标识符
  • 债权人债务重组损益计入什么科目
  • 因员工过失造成的工伤用不用赔
  • 工会活动购买的产品
  • 一般纳税人房租租赁费的税率
  • 如何冲其他应付款发票
  • 一般纳税人增值税税率
  • 小规模购入固定资产怎么做账
  • 自产产品用于职工食堂,确认收入吗
  • 一般纳税人企业所得税政策最新2023
  • 做假账本怎么判
  • 预付工资怎么入账
  • 企业进行短期投资的目的包括
  • 介绍一种新产品
  • mysql在数据分析中的作用
  • 自动化生产线模型
  • 如何解决windows10数据放到国外进行处理
  • hyper-v怎么样
  • 大白菜一键装机教程
  • w3dbsmgr.exe是什么进程
  • 文本文本
  • linux安装php7.3
  • windows xp iis安装
  • windows tcp
  • vsftp命令
  • win10 mobile 1709
  • Node.js中的事件循环是什么样的
  • jquery多级菜单
  • JavaScript函数中,哪个语句可以返回值
  • 工商局税收
  • 购车发票包含
  • 济南税务稽查局人员名单
  • 地税怎么查个人所得税
  • 漳州市税务局电话多少
  • 总公司和子公司是什么关系
  • 公司借款给员工是否合法
  • 企业资质怎么报审
  • 福建地税网上办事大厅
  • 买新车的注意事项有哪些比较重要的
  • 人社局要求社保补缴
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设