美文网首页数据库-mysql
mysql的备份原理

mysql的备份原理

作者: 光小月 | 来源:发表于2018-04-19 10:00 被阅读4次

    摘自:https://www.2cto.com/database/201605/506246.html

    1. 冷备份

    原理: 关闭MySQL服务器,然后将data目录下面的所有文件进行拷贝保存,需要恢复时,则将目录拷贝到需要恢复的机器即可

    2. 快照备份

    原理: 将所有的数据库文件放在同一分区中,然后对该分区执行快照工作,对于Linux而言,需要通过LVM(Logical Volumn Manager)来实现。LVM使用写时复制(copy-on-write)技术来创建快照,例如,对整个卷的某个瞬间的逻辑副本。
    涉及到的文件有逻辑副本文件与日志文件。
    仅支持innodb存储引擎。LVM有一个快照预留区域,如果原始卷数据有变化时,LVM保证在任何变更写入之前,会复制受影响块到快照预留区域。


    image.png

    日志文件记录了LVM备份期间的操作,LVM备份的时候会加入flush table with read lock锁,保证某个时间点上的数据的一致性。

    3. 逻辑备份-Mysqldump(热备份)

    原理: 一定要将事务表(innodb)和非事务表(比如myisam)区别对待,因为备份的流程与此息息相关。而且,到目前为止,我们也无法规避myisam表,即使我们的所有业务表都是innodb,因为mysql库中系统表仍然采用的myisam表。备份的基本流程如下:
    1.调用FTWRL(flush tables with read lock),全局禁止读写(就是不commit)
    2.开启快照读,获取此时的快照(仅对innodb表起作用)
    3.备份非innodb表数据(.frm,.myi,*.myd等)
    4.非innodb表备份完毕后,释放FTWRL锁
    5.逐一备份innodb表数据
    6.备份完成。

    4. Xtrabackup

    原理: 由于Xtrabackup支持备份innodb表,实际生产环境中我们使用的工具是innobackupex,它是对xtrabackup的一层封装。innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,innobackupex的基本流程如下:
    1.开启redo日志拷贝的线程,从最新的检查点开始顺序拷贝redo日志;
    2.开启innodb文件拷贝的线程,拷贝innodb表的数据
    3.innodb文件拷贝结束,通知调用FTWRL,获取一致性位点
    4.备份非innodb表(系统表)和frm文件
    5.由于此时没有新事务提交,等待redo日志拷贝完成
    6.最新的redo日志拷贝完成后,相当于此时的innodb表和非innodb表数据都是最新的
    7.获取binlog位点,此时数据库的状态是一致的。
    8.释放锁,备份结束。

    image.png

    欢迎关注,以后会不定时更新!

    相关文章

      网友评论

        本文标题:mysql的备份原理

        本文链接:https://www.haomeiwen.com/subject/akiikftx.html