• Percona XtraBackup原理详解


    一 简介

    Percona XtraBackup是一个开源的MySQL数据库热备工具,允许你在备份的时候不锁表。支持备份的存储引擎有InnoDB, XtraDB, MyISAM ;支持的MySQL版本 5.1 5.5, 5.6 , 5.7;无论是7X24的高负载数据库环境,还是低TPS的数据库环境,Percona XtraBackup都能完成备份而不影响生产环境

    Percona XtraBackup是世界上唯一开源免费的MySQL热备工具,可以对InnoDB 和 XtraDB存储引擎的表进行非堵塞备份。

    二 备份特点

    1 快速可靠完成备份

    2 备份期间不会打断正在进行的事务

    3 由于有压缩备份选项可以节省磁盘空间和网络带宽

    4 自动的备份校验

    5 更快的恢复速度,更短的恢复时间

    三  备份原理

    Percona XtraBackup是基于Innodb的 crash-recovery功能。在备份的过程中,XtraBackup拷贝Innodb的数据文件,但是在拷贝数据文件的过程中,数据库一直在运行,会有增删改的操作,这样会造成拷贝的数据文件中的数据状态是不一致的。但随后会对文件进行crash recovery,是数据恢复一致。(原理是基于crash-recovery)

    Innodb维护了一个redo log,又叫做transaction log(事务日志),包含了数据文件的所有变化,当Innodb启动的时候,会检查数据文件和redo log,然后做两件事:将已提交的事务应用到数据文件,对修改了数据但未提交的事务回滚。(应用已提交,回滚未提交)

    当Percona XtraBackup开始备份的时候,会记住日志的日志序列号(LSN),然后开始拷贝数据文件。拷贝这些文件需要花费一定时间,当在拷贝过程中,数据文件可能会发生变化,所以你的备份就是不同时间点的数据状态,即数据不一致了。Percona XtraBackup是如何解决这个问题的呢?与此同时,Percona XtraBackup在后台会另外启动一个进程,监控事务日志文件然后从中拷贝变化。Percona XtraBackup要不断进行此操作,因为redo log 是循环写的,写完之后会被覆盖重写。Percona XtraBackup需要从启动备份后redo log的每次变化。(两个进程 一个进程拷贝数据文件,一个进程通过日志文件拷贝变化)

    完成innodb引擎的数据文件备份后,会进行非Innodb引擎表的备份。Percona MySQL 5.6 有backup locks,Percona XtraBackup利用此功能替代FLUSH TABLES WITH READ LOCK,这样就可以避免堵塞Innodb表的DML操作。

    总结备份过程:

    1 首先拷贝Innodb表的数据文件(利用两个进程 一个拷贝文件一个拷贝变化)

    2 如果支持 backup lock,利用LOCK TABLE FOR BACKUP拷贝非Innodb表的数据文件(percona MySQL 5.6+ 支持oracle的MySQL支持吗?)

    3 使用 LOCK BINLOG FOR  BACKUP 禁止所有改变Exec_Master_Log_Pos 或 Exec_Gtid_Set的操作。完成redo log的备份和获取binlog的日志中的坐标输出到备份目录。然后释放锁

    四 恢复原理

    恢复备份可以利用 xtrabackup --copy-back  或 xtrabackup --move-back选项。

    首先读取配置文件my.cnf中参数datadir, innodb_data_home_dir, innodb_data_file_path, innodb_log_group_home_dir并检查目录是否存在。然后恢复MyISAM表,索引等,随后恢复Innodb的表和索引。

    需要注意的时候在恢复完成后需要修改目录的属组属主,例如:chown -R mysql.mysql  dir

    --copy-back 复制备份文件到恢复目录

    --move-back 将备份文件移动到恢复目录,主要这个会删除备份文件,在磁盘空间不足的时候可以使用

    参考资料:

    官方文档 https://www.percona.com/doc/percona-xtrabackup/2.4/how_xtrabackup_works.html

    博客:https://www.cnblogs.com/zhoujinyi/p/5888271.html

  • 相关阅读:
    走了
    地表最简单安装MySQL及配置的方法,没有之一
    周总结
    Codeforces 1323 div2题解ABC
    Code force-CodeCraft-20 (Div. 2) D. Nash Matrix 详解(DFS构造)
    LeetCode 1293. Shortest Path in a Grid with Obstacles Elimination
    LeetCode 1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
    LeetCode 1291. Sequential Digits
    LeetCode 1290. Convert Binary Number in a Linked List to Integer
    LeetCode 91. Decode Ways
  • 原文地址:https://www.cnblogs.com/DBABlog/p/12926896.html
Copyright © 2020-2023  润新知