介绍

  1. 1、在线(热)备份整个库的InnoDB XtraDB
  2. 2、在xtrabackup的上一次整库备份基础上做增量备份(innodb only)以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)
  3. 3MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。
  4. 4Xtrabackup工具支持对InnoDB存储引擎的增量备份。

原理

XtraBackup基于InnoDB的crash-recovery功能。它会复制innodb 的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。

InnoDB维护了一个redo log,又称为 transaction log,事务日志,它包含了innodb数据的所有改动情况。当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做二步操作:
  1.It applies committed transaction log entries to the data files
  2.it performs an undo operation on any transactions that modified data but did not commit.

XtraBackup在备份的时候, 一页一页地复制innodb的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的log pages复制走。为什么要急着复制走呢? 前几章的时候就提过这个问题,因为transactions log文件大小有限,写满之后,就会从头再开始写,所以新数据可能会覆盖到旧的数据。

在prepare过程中,XtraBackup使用复制到的transactions log 对备份出来的innodb data file 进行crash recovery。

xtrabackup以read-write模式打开innodb的数据文件,然后对其进行复制。其实它不会修改此文件。也就是说,运行xtrabackup的用户,必须对innodb的数据文件具有读写权限。

为什么要用rw模式呢?直接read模式不好么?因为xtrabackup采用了其内置的innodb库来打开文件,而innodb库打开文件的时候就是rw的。

安装

yum install -y percona-xtrabackup

创建用于备份恢复的用户 mulong 并赋予权限

mysql> create user mulong@'localhost' identified by '123456';
mysql> grant reload,process,lock tables,replication client on *.* to mulong@localhost;

Xtrabackup 全量备份与全量恢复

—databases 要备份的数据库
—databases-exclude 排除备份的数据库
如果不指定 会进行全部数据库备份

innobackupex --defaults-file=/etc/my.cnf.d/server.cnf --user=root --databases="qt qt1" --databases-exclude="qt3 qt4" --parallel=2 --throttle=200 /data-bak-path --socket=/tmp/mysql.sock

更多内容 传送门