Mysql备份原理与工具mysqldump

MySQL备份原理


数据备份是数据安全的底线,在任何场景下面,无论是上线后的数据回滚,数据丢失都能够有效的止损,将损失降到最低程度。

衡量数据备份与恢复的两个重要指标:

对于MySQL备份主要分为以下两种:

热备又分为两种:

快照备份:LVM使用写时复制(copy-on-write)技术来创建快照

例如对整个卷的某个瞬时的逻辑副本,类似于数据库中的innodb存储引擎的MVCC,只不过LVM的快照在文件系统层面,而MVCC在数据库层面,而且仅仅支持innodb存储引擎。

LVM有一个快照预留区域,如果原始数据有变化时,LVM保证在任何变更写入之前会复制受影响块到快照预留区域。

简单来说,快照区域内保存了快照开始时候的一致的所有old数据,对于更新很少的数据库,快照也会非常小。

对于MySQL而言,为了使用快照备份,需要将数据文件,日志文件都存放在一个逻辑卷中,然后对该卷做备份即可。

快照备份更偏向于对误操作防范,可以将数据库迅速恢复到快照产生的时间点,然后结合二进制日志可以恢复到指定的时间点。

逻辑备份

冷备份和快照备份由于其弊端在生产环境很少使用,使用更多的是MySQL自带的逻辑备份工具和物理备份工具。

MySQL官方虽然通过了MySQLdump逻辑备份工具,虽然已经足够用了,但是存在单线程备份慢的问题。

在社区提供了更加优秀的逻辑备份工具mysqldumper,它的优势主要体现在多线程备份,备份的速度更加快。

mysqldump工具


MySQLdump备份不得不提的两个关键参数

--single-transcation
--master-data=2

 关于mysqldump工作原理

一定要区别对待事务表innodb和非事务表myisam,因为备份流程与此息息相关。

注意:即使到目前为止,我们所有业务使用的表都是innodb,我们也无法规避myisam表,因为MySQL库中的系统表仍然采用的是myisam表。

备份流程如下:

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

整个过程如图:

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/106781973