mysql-5.6.25 编译安装 和 使用 xstrabackup 备份实战 (二)

MySQL备份主要的方式是使用mysqldump来做逻辑导出备份,Mysqldump是由mysql服务器自带的一个工具

优点:

使用简单;备份生成的文件格式为sql脚本格式.
缺点:

导出的结果可能会不一致,如果强行一致则需要锁定所有的表(myisam,innodb,etc..),导出需要经过sql层处理,随着数据库变大,速度会变得非常慢.

针对以上的特点,目前业界主要的针对innodb的热备工具有:

1)mysql商业版中的备份工具(需要收费);

2)percona公司的开源工具xtrabackup工具.


Xtrabackup工具的主要特点有:

1)热备innodb表(不需要锁,myisam表需要read lock);

2)不需要通过sql层处理,直接物理拷贝文件;支持增量备份;

3)支持并行备份;

4)支持straming

5)开源.


好,废话少说,开始安装吧!!

1)安装

1.编译安装

首先从percona的网站下载过来一个tar.gz文件,直接解压即可(例:安装在/root/soft目录下)
[root@localhost soft]# pwd
/root/soft
[root@localhost soft]# ls
percona-xtrabackup-2.1.8-733-Linux-x86_64.tar.gz  
[root@localhost soft]# tar -xvf percona-xtrabackup-2.1.8-733-Linux-x86_64.tar.gz
解压后生成一个目录:
percona-xtrabackup-2.1.8-Linux-x86_64
把/root/soft/percona-xtrabackup-2.1.8-Linux-x86_64/bin 加到用户的.bash_profil文件的PATH变量中,然后source或重新登录用户生效.
确认相关文件有执行权限
[root@localhost bin]# ls -l
total 114080
-rwxr-xr-x 1 root root   169217 Mar  3 08:02 innobackupex
lrwxrwxrwx 1 root root       12 Mar 28 08:59 innobackupex-1.5.1 -> innobackupex
-rwxr-xr-x 1 root root  2226551 Mar  3 08:02 xbcrypt
-rwxr-xr-x 1 root root  2300304 Mar  3 08:02 xbstream
-rwxr-xr-x 1 root root 13177944 Mar  3 08:02 xtrabackup
-rwxr-xr-x 1 root root 16599128 Mar  3 07:57 xtrabackup_55
-rwxr-xr-x 1 root root 82194272 Mar  3 08:00 xtrabackup_56


2.yum安装

安装repo:

yum install

http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm


安装percona-xtrabackup:

yum -y install percona-xtrabackup

安装依赖包:

yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL


2)全备及其恢复

全备:

执行如下语句进行全备:

innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=*** --socket=/tmp/mysql.sock /backup/mysql/data

该语句将拷贝数据文件(由my.cnf里的变量datadir指定)至备份目录下(/backup/mysql/data),注意:如果不指定--defaults-file,默认值为/etc/my.cnf

备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为/backup/mysql/data/2013-10-29_09-05-25),在该目录下存放备份文件。

恢复:

innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=*** --use-memory=4G --apply-log /backup/mysql/data/2013-10-29_09-05-25

innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=*** --copy-back /backup/mysql/data/2013-10-29_09-05-25

从什么可以看出,恢复分为两个步骤,

第1步是apply-log,为了加快速度,一般建议设置--use-memory这个步骤完成之后,目录/backup/mysql/data/2013-10-29_09-05-25下的备份文件已经准备就绪。

第2步是copy-back,即把备份文件拷贝至原数据目录下。

恢复完成之后,一定要记得检查数据目录的所有者和权限是否正确。


3)增量备份及其恢复

注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备。

增量备份:

增量备份需要基于全备,先假设我们已经有了一个全备(/backup/mysql/data/2013-10-29_09-05-25),在该全表的基础上做增量备份。

innobackupex --defaults-file=/etc/mysql/my.cnf --socket=/tmp/mysql.sock --user=root --password=*** --incremental-basedir=/backup/mysql/data/2013-10-29_09-05-25 --incremental /backup/mysql/data

其中--incremental-basedir指向全备目录,--incremental指向增量备份的目录。

上面语句执行成功之后,会在--incremental执行的目录下创建一个时间戳子目录(本例中为:/backup/mysql/data/2013-10-29_09-52-37),在该目录下存放着增量备份的所有文件。

在备份目录下,有一个文件xtrabackup_checkpoints记录着备份信息。


全备的信息如下:

backup_type = full-backuped

from_lsn = 0

to_lsn = 563759005914

last_lsn = 563759005914


基于该全备的增量备份的信息如下:

backup_type = incremental

from_lsn = 563759005914

to_lsn = 574765133284

last_lsn = 574765133284


从上面可以看出,增量备份的from_lsn正好等于全备的to_lsn。

那么,我们是否可以在增量备份的基础上再做增量备份呢?答案是肯定的,只要把--incremental-basedir执行上一次增量备份的目录即可,如下所示:

innobackupex --defaults-file=/etc/mysql/my.cnf --socket=/tmp/mysql.sock --user=root --password=*** --incremental-basedir=/backup/mysql/data/2013-10-29_09-52-37 --incremental /backup/mysql/data

它的xtrabackup_checkpoints记录着备份信息如下:

backup_type = incremental

from_lsn = 574765133284

to_lsn = 574770200380

last_lsn = 574770200950

可以看到,该增量备份的from_lsn是从上一次增量备份的to_lsn开始的。

恢复:

增量备份的恢复比全备要复杂很多,第一步是在所有备份目录下重做已提交的日志,如:

innobackupex --apply-log --redo-only BASE-DIR

innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

其中BASE-DIR是指全备目录,INCREMENTAL-DIR-1是指第一次的增量备份,INCREMENTAL-DIR-2是指第二次的增量备份,以此类推。

这里要注意的是:最后一步的增量备份并没有--redo-only选项!还有,可以使用--use_memory提高性能。

以上语句执行成功之后,最终数据在BASE-DIR(即全备目录)下。

第一步完成之后,我们开始第二步:回滚未完成的日志:

innobackupex --apply-log BASE-DIR

上面执行完之后,BASE-DIR里的备份文件已完全准备就绪,最后一步是拷贝:

innobackupex --copy-back BASE-DIR

同样地,拷贝结束之后,记得检查下数据目录的权限是否正确。

你可能感兴趣的:(mysql,数据库,服务器,网站)