MySQL备份使用XtraBackup物理备份MySQL的流程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL备份使用XtraBackup物理备份MySQL的流程相关的知识,希望对你有一定的参考价值。
简介:
? XtraBackup包含两个主要的工具即:xtrabackup和innobackupex
? xtrabackup:只能备份InnoDB和XtraDB两种事务引擎的表,不支持备份非事务引擎的表。
? innobackupex:封装了xtrabackup的perl脚本,支持在全局读锁下的非事务表备份,支持无全局读锁下的事务表。
安装:
? 推荐安装percona公司的源然后yum安装
yum -y install https://www.percona.com/redir/downloads/percona-release/redhat/percona-release-0.1-4.noarch.rpm
yum -y install percona-xtrabackup-24
innobackupex备份流程:
? 1.备份开始时先开启一个后台检测进程,实时监测redo的变化,一但发现redo中有新日志写入,立刻将日志记入其的后台日志文件(xtrabackup_log)中,
? 2.复制InnoDB表的数据文件,系统表空间文件ibdata1,完成后进入下一步,
? 3.执行全局读锁,锁住所有的表(事务,非事务),拷贝非事务表的文件(.frm .MYI .MYD),获取binlog位置,解锁全部表
? 4.停止xtrabackup_log,结束备份
阶段 | 解释 |
---|---|
生成xtrabackup日志文件 | 软件本身开启一个用来保存redo的日志 |
拷贝InnoDB相关文件(.ibd表数据文件,ibdata1回滚空间) | |
FTWRL,全局读锁 | 非事务表不支持用事务保证一致性,需要读锁 |
拷贝innodb表结构文件frm,非事务表的全部文件 | |
获取binlog位置 | 以此位置作为备份的全局位置 |
释放全局读锁 | 备份初步结束 |
停止xtrabackup的日志工作。 | 备份结束 |
? 备份语句:
innobackupex --defaults-file=/etc/my.cnf --user=bak --password=bak123 --stream=xbstream .|gzip cat ->xtrabak.xb.gz
?
innobackupex恢复流程:
? 启动XtraBackup软件包自带的InnoDB实例,回放xtrabackup过程中收集的xtrabackup_log:
? 根据binlog,回放binlog中已经登记,但redo中未提交但已经prepare的事务。
? 根据binlog,回滚binlog中未登记,但redo中已经prepare的事务
? 将应用好的文件拷回要被恢复实例的数据目录,赋予mysql用户的权限即可。
#解压
gunzip all.xb.gz -c|xbstream -x -C /data/full
#应用xtrabackup_log
innobackupex --apply-log --use-memory=1G /data/full
#拷回预备恢复的文件,也可以用手工拷贝代替
innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/full
#将拷回的文件所有权赋给mysql用户
chown -R mysql.mysql /data/mysql/3306
#启动数据库
mysqld --defaults-file=/etc/my.cnf
附:
1.使用xbstream而不是tar的原因:
? 传统复制的情况下,从从库备份,需要获得从库的复制信息,可以使用--slave-info参数,这样复制信息会附加在备份文件包中,但是用tar的时候总是会截断一部分复制信息的描述文件。转用xbstream流传输后没有问题/另外,如果使用GTID,不考虑获取binlog file和pos的话,tar或者xbstream都可以接受。
2.不推荐使用增备的原因:
? 1.增备恢复步骤繁琐(需要在最后一个增备之前,只应用redo,最后一个才应用全部xtrabackup_log,拷回也麻烦)
? 2.与全备加binlogserver相比,不能恢复增备之间任意时间点的数据。
3.总的来看,XtraBackup仍是物理备份为主,辅以逻辑备份完成数据一致性的备份方式。
?
?
以上是关于MySQL备份使用XtraBackup物理备份MySQL的流程的主要内容,如果未能解决你的问题,请参考以下文章