爱易网页
数据库教程
xtrabackup 增量备份跟部分备份
日期:2014-05-16 浏览次数:20459 次
xtrabackup 增量备份和部分备份
㈠ 增量备份 原理: ① 首先进行0级备份,记录此时LSN ② 当进行1级备份时,比较表空间中每个页的LSN是否大于0级备份的LSN,如果是,则备份该页,并记录当前的LSN 0级备份完,xtrabackup会在备份保存点下的xtrabackup_checkpoints文件里记录一个to_lsn值,该值是备份结束后全库的LSN 下面是0级备份的一个简单例子: $ xtrabackup --backup --target-dir=/home/mysql/backup 到/home/mysql/backup目录下查看xtrabackup_checkpoints文件,大概会有如下类似信息: [mysql@even backup]$ cat xtrabackup_checkpoints backup_type = full-backuped from_lsn = 0 to_lsn = 2674772512 接着可以做1级备份: $ xtrabackup --backup --target-dir=/home/mysql/delta --incremental-basedir=/home/mysql/backup 在/home/mysql/delta下,大概会有*.ibd.delta和ibdata1.delta文件,这些表示从to_lsn = 2674772512之后有变化 如果检查/home/mysql/delta下的/home/mysql/delta文件,会有如下类似信息: [mysql@even delta]$ cat xtrabackup_checkpoints backup_type = incremental from_lsn = 2674772512 to_lsn = 2674772512 都有to_lsn值,这会增量的迭代做了基础 在--prepare阶段,增量备份和普通的备份存在差异 对于普通的备份,已提交的事务通过备份的数据文件利用日志中的变化信息去重演这个变化的过程,而未提交的会被回滚 对于增量备份,在--prepare阶段,必须跳过未提交事务的回滚,因为它们在下一次增量备份时可能会被提交 所以,应该使用--apply-log-only来阻止未提交事务的回滚,如果你不那么做的话,增量备份可能会变成无效 若是事务被回滚掉,则下一次的增量备份将无法应用 假定你做了一次0级和2次增量备份,目录如下: /data/backups/base /data/backups/inc1 /data/backups/inc2 那么为了阻止事务的回滚,你应该: $ xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base 这步完成,即使跳过事务回滚,你的备份也算是有效的,如果此时恢复MySQL,InnoDB会在后台做崩溃恢复,并告知你上次未正常关库而已 运用第一次增量备份: xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/inc1 运用第二次增量备份: xtrabackup --prepare --target-dir=/data/backups/base --incremental-dir=/data/backups/inc2 在运用最后一次增量备份时,我们把--apply-log-only略去了,也只有在最后一次增量--prepare时才可以省略 因为我们没有必要把这个回滚解析交给服务器去做,这只会增加Server的压力,但即使--apply-log-only,备份仍然是一致的㈡ 部分备份 当innodb_file_per_table打开时,xtrabackup支持部分备份,有2种方式:--tables和--tables-file 我本人不喜欢--tables,比较麻烦,需要正则表达式匹配和考虑OS转义符还有BASH命令长度,巨蛋疼 主要把要备份的表写到一个文件里面即可,每个表一行 例如,我只想备份employees库下面的employees和departments这2个表 $ xtrabackup --backup --tables-file=/tmp/t.TXT --target-dir=/home/mysql/backup 需要注意的是,--tables-file指定的文件只能放在/tmp下,估计是xtrabackup工具内部写死的关系 但是在--prepare时你将会收到一个类似下面的错误: 131011 14:05:24 InnoDB: Error: trying to open a table, but could not InnoDB: open the tablespace file './employees/dept_emp.ibd'! InnoDB: It will be removed from data dictionary. 这是因为这些表载xtrabackup内置的InnoDB数据字典中存在,但相应的.ibd不存在 参考文章: http://www.percona.com/doc/percona-xtrabackup/2.1/ By 迦夜 2013-10-11 Learn bearish some things,is their best protection
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。