Mysql增量备份
Xtrabackup中包含两个工具:
xtrabackup - 用于热备份innodb, xtradb表的工具,不能备份其他表(MYISAM表)。
innobackupex - 对xtrabackup封装的perl脚本,提供了myisam表备份的能力。(能进行整库和数据表备份)。
MySQL主从同步原理
MySQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。
XtraBackup备份原理
innobackupex在后台线程不断追踪InnoDB的日志文件,然后复制InnoDB的数据文件。数据文件复制完成之后,日志的复制线程也会结束。这样就得到了不在同一时间点的数据副本和开始备份以后的事务日志。完成上面的步骤之后,就可以使用InnoDB崩溃恢复代码执行事务日志(redo log),以达到数据的一致性。
备份分为两个过程:
backup,备份阶段,追踪事务日志和复制数据文件(物理备份)。
preparing,重放事务日志,使所有的数据处于同一个时间点,达到一致性状态。
XtraBackup的优点
可以快速可靠的完成数据备份(复制数据文件和追踪事务日志)
数据备份过程中不会中断事务的处理(热备份)
节约磁盘空间和网络带宽
自动完成备份鉴定
因更快的恢复时间而提高在线时间
一、安装percona-xtrabackup
1.官网下载
2.yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQ
3.rpm -ivh 安装包.rpm
二、innobackupex备份全库
1.备份
innobackupex --defaults-file=/usr/local/mysql_2/my.cnf --user=root --password=password --socket=/tmp/mysql_2.sock /usr/local/backup
当然也可以只备份指定的库和表
2.恢复
innobackupex --defaults-file=/usr/local/mysql_2/my.cnf --socket=/tmp/mysql_2.sock --user=root --password=password --apply-log /usr/local/backup/2016-01-26_18-32-02 innobackupex --defaults-file=/usr/local/mysql_2/my.cnf --socket=/tmp/mysql_2.sock --user=root --password=password --copy-back /usr/local/backup/2016-01-26_18-32-02
三、全量备份及恢复
备份
xtrabackup --defaults-file=/usr/local/mysql_2/my.cnf --user=root --password=password --socket=/tmp/mysql_2.sock --backup --target-dir=/usr/local/backup/base/2016-2-10
2.恢复
xtrabackup --defaults-file=/usr/local/mysql_2/my.cnf --user=root --password=password --socket=/tmp/mysql_2.sock --prepare --target-dir=/usr/local/backup/base/2016-2-10/
xtrabackup --defaults-file=/usr/local/mysql_2/my.cnf --user=root --password=password --socket=/tmp/mysql_2.sock --prepare --target-dir=/usr/local/backup/base/2016-2-10/
执行两次prepare,是因为第二次prepare会帮助我们生成redo log文件(重做日志文件),加快MySQL数据库启动的速度
3.
//将数据库停掉
#/etc/init.d/mysqld stop
//删除数据库目录下的ib*(ib开头的所有)文件。
#rm /data/mysql_2/ib*
//将/usr/local/Backup/base/2016-2-10目录下的ib*文件拷贝到数据库目录。
#cd /data/mysql_2/
#cp /usr/local/Backup/base/2016-2-10/ib* ./
#chown -R mysql:mysql /data/mysql_2/
4.重启mysql,进入mysql检查是否恢复
四、增量备份及恢复
1.先全量备份:
xtrabackup --defaults-file=/usr/local/mysql_2/my.cnf --user=root --password=password --socket=/tmp/mysql_2.sock --backup --target-dir=/usr/local/backup/base/2016-2-10
2.在全量的基础上增量备份:
xtrabackup --defaults-file=/usr/local/mysql_2/my.cnf --user=root --password=password --socket=/tmp/mysql_2.sock --backup --target-dir=/usr/local/backup/incre/1 --incremental-basedir=/usr/local/backup/base/2016-2-10/
3.恢复
mysql>drop database db3;
xtrabackup --defaults-file=/usr/local/mysql_2/my.cnf --user=root --password=password --socket=/tmp/mysql_2.sock --prepare --apply-log-only --target-dir=/usr/local/backup/base/2016-2-10/
xtrabackup --defaults-file=/usr/local/mysql_2/my.cnf --user=root --password=password --socket=/tmp/mysql_2.sock --prepare --apply-log-only --target-dir=/usr/local/backup/base/2016-2-10/ --incremental-dir=/usr/local/backup/incre/1/
xtrabackup --defaults-file=/usr/local/mysql_2/my.cnf --user=root --password=password --socket=/tmp/mysql_2.sock --prepare --apply-log-only --target-dir=/usr/local/backup/base/2016-2-10/
增量备份也可以在前一个增量备份的基础继续增量备份,只不过这种方法会比较不安全,丢失前面的增量备份将导致后面的增量备份全都失效。
4.
//将数据库停掉
#/etc/init.d/mysqld stop
//删除数据库目录下的ib*(ib开头的所有)文件。
#rm /data/mysql_2/ib*
//将/usr/local/Backup/base/2016-2-10目录下的ib*文件拷贝到数据库目录。
#cd /data/mysql_2/
#cp /usr/local/Backup/base/2016-2-10/ib* ./
#cp -r /usr/local/Backup/base/2016-2-10/db3 ./
#chown -R mysql:mysql /data/mysql_2/
4.重启mysql,进入mysql检查db3是否恢复