xtrabakcup 原理及使用

XtraBackup是percona公司提供的开源工具,以热备Innodb表著称而被广泛采用。

  XtraBackup对Innodb的备份之所以是热备,无需锁表,是基于Innodb自身的崩溃恢复机制,它首先复制所有的Innodb数据文件,这样复制出来的文件肯定是不一致的,然后对每个文件进行崩溃恢复处理,最终达到一致。就和MySQL在启动Innodb的时候一样,会通过比较数据文件头和redo log文件头信息来检查数据是否是一致的,如果不一致就尝试通过前滚(把redo log中所有提交的事务写入数据文件)和回滚(从数据文件中撤销所有redo log中未提交的事务引起的修改)来使数据达到最终一致。

  XtraBackup在启动的时候会记录一个LSN(log sequence number),然后就把所有的Innodb数据文件复制出来,这样复制出来的数据文件是不一致的,但是XtraBackup会在后台运行一个进程把所有对redo log file的修改记录下来,只要有了这个数据,就能进行崩溃恢复。只所以要额外记录下来,是因为MySQL自身的redo log file是可重用的。

  以上的操作是由xtrabackup二进制程序(比如xtrabackup_55)完成的,如果使用innobackupex 脚本,刚才的步骤完成以后,innobackupex就会去备份MyISAM表和.frm文件,这时要保证数据的一致性就会先锁表了,通过FLUSH TABLES WITH READ LOCK命令锁表然后把文件复制出来,再释放掉这个锁。

使用案例:

准备:

针对linux和mysql的版本下载对应的xtrabackup工具(mysql 5.1只能用2.0的版本,2.0以上的使用会报错。

全备(defaults-file:指定配置文件,/root/backup:备份目录)

./innobackupex --user=root --password=xxx --defaults-file=/etc/my.cnf /root/backup/


全备还原

①准备(生成备份过程中的的redo log,undo log,用于进行前滚或者回滚使数据达成一致)

./innobackupex --apply-log /root/backup/2014-03-14_06-52-12/

②覆盖还原 

停mysql服务

Original data directory '/var/lib/mysql' is not empty! at ./innobackupex line 590. ###  清空datadir目录下的文件

Original InnoDB data directory'/var/lib/mysql/innodb' is not empty! at ./innobackupex line 590. ### 清空共享表空间文件

./innobackupex --copy-back /root/backup/2014-03-14_06-52-12/

chown -R mysql:mysql /var/lib/mysql

启动mysql服务


增量备份 (incremental-basedir是基于哪个完全备份的目录做增量备份)

 ./innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxx  --incremental --incremental-basedir=/root/backup/2014-03-14_07-49-42/  /root/backup/incream/   


还原增量备份(增量备份只能执行一次apply-log,多次会报错)

停mysql服务

./innobackupex --apply-log /root/backup/2014-03-14_08-18-25/  --incremental-dir=/root/backup/incream/2014-03-14_08-22-00/

./innobackupex --copy-back /root/backup/2014-03-14_08-18-25/ 

chown -R mysql:mysql /var/lib/mysql

启动mysql服务


===================================================================================================================

高级功能

将备份通过流保存成文件,或者进行压缩

./innobackupex --stream=xbstream /root/backup/ > /root/backup/backup.xbstream

./innobackupex --stream=xbstream --compress /root/backup/ > /root/backup/backup.xbstream

--------------------------------------------

从库上备份  (--safe-slave-backup)

为保证一直的复制状态,此选项停止slave的SQL线程。并且备份的时候show status 查看的Slave_open_temp_tables值必须为0,否则会在--safe-slave-backup-timeout超时(默认300秒)后备份失败。

--------------------------------------------

并行备份

--------------------------------------------

单表恢复

--------------------------------------------

时间点恢复

mysqlbinlog /path/to/datadir/mysql-bin.000003 /path/to/datadir/mysql-bin.000004 --start-position=57 --stop-datetime="11-12-25 01:00:00" | mysql -u root -p

--------------------------------------------







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值