> 数据库 > MySQL >

centos使用xtrabackup对MySQL进行备份和恢复

1、xtrabackup使用范围

xtrabackup:用于热备份innodb, xtradb引擎的数据表,不能备份其他类型的表,也不能备份数据表结构;

innobackupex:将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力(主要应用该脚本)。

 

2、xtrabackup的安装

wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.2/RPM/rhel6/i686/percona-xtrabackup-2.1.2-612.rhel6.i686.rp 

 

rpm -ivh percona-xtrabackup-2.1.2-612.rhel6.i686.rpm

说明:rpm安装的依赖包根据提醒安装既可。

 

3、安装好软件后,就可以直接使用

eg1:完整备份数据库

innobackupex --user=root --password=xxxxx --defaults-file=/etc/my.cnf --database=phpcms /mybak/

 

说明:

/etc/my.cnf,需要配置datadir路径

[mysqld]

datadir = /usr/local/mysql/data   #在[mysqld]单元末尾中添加数据库存放的文件

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

--database=phpcms #表示需要备份的数据库,如果不加表示备份所有数据库(既完整备份)

/tmp/             #备份的目标位置

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

[root@mysql 2015-10-19_21-06-56]# ll                          #备份的信息

total 18468

-rw-r--r-- 1 root root      260 Oct 19 21:06 backup-my.cnf

-rw-r----- 1 root root 18874368 Oct 19 21:06 ibdata1

drwxr-xr-x 2 root root    16384 Oct 19 21:06 phpcms

-rw-r--r-- 1 root root       13 Oct 19 21:06 xtrabackup_binary

-rw-r--r-- 1 root root       23 Oct 19 21:06 xtrabackup_binlog_info

-rw-r----- 1 root root       89 Oct 19 21:06 xtrabackup_checkpoints

-rw-r----- 1 root root     2560 Oct 19 21:06 xtrabackup_logfile

 

eg2:备份打包

innobackupex --user=root --password=xxxxxxx --defaults-file=/etc/my.cnf --database=phpcms --stream=tar /mybak > /mybak/phpcms.tar 

 

说明:

--stream=tar #表示打包方式

 

eg3:完整备份并打包压缩

innobackupex --user=root --password=xxxxxxx --defaults-file=/etc/my.cnf --database=phpcms --stream=tar /mybak/ | gzip > /mybak/phpcms.tar.gz 

 

eg4:远程备份打包

innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --database=phpcms --stream=tar /mybak/ | ssh root@192.168.1.124 cat ">"  /tmp/phpcms.tar

 

说明:

root@192.168.1.124's password: >> log scanned up to (1668412)

[01] Streaming ./ibdata1

>> log scanned up to (1668412)

>> log scanned up to (1668412)

>> log scanned up to (1668412)   #一直在不断扫描,在这期间需输入远程备份主机的密码(现实环境还是通过证书验收)

 

eg5:增量备份

innobackupex --user=root --password=xxxxxx --database=phpcms --incremental 

--incremental-basedir=/mybak/2015-10-19_21-06-56/ /mybak/add/  

 

#增量备份主要是通过lsn的表示进行判断(针对innodb引擎)

[root@mysql 2015-10-19_21-06-56]# cat xtrabackup_checkpoints 

backup_type = full-prepared           #全局备份

from_lsn = 0

to_lsn = 1668412

last_lsn = 1668412                    #结束位置

compact = 0

 

[root@mysql 2015-10-19_21-48-20]# cat xtrabackup_checkpoints

backup_type = incremental            #增量备份

from_lsn = 1668412                   #“开始位置”和上面“结束位置”一致

to_lsn = 1768416

last_lsn =1768416 

compact = 0

 

说明:

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

 

 

4、数据还原

eg1:完整备份恢复:

 

第一步:删除需要恢复得数据库

/etc/init.d/mysql stop

mv /usr/local/mysql/data/ /usr/local/mysql/data/

mkdir /usr/local/mysql/data/                    #恢复得时候,该目录必须为空

 

第二步:然后将备份文件中的日志应用到备份文件中的数据文件上

 

innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --apply-log /mybak/2015-10-19_21-06-56/  

 

这里的--apply-log指明是将日志应用到数据文件上,完成之后将备份文件中的数据恢复到数据库中:

--defaults-file:数据还原的目标位置

 

innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --copy-back /mybak/2015-10-19_21-06-56/   

--copy-back指明是进行数据恢复。数据恢复完成之后,需要修改相关文件的权限mysql数据库才能正常启动。

 

chown -R mysql:mysql /usr/local/mysql/data/

service mysql start  

 

    注意:如果数据在远程主机上,首先将完整备份复制到本地主机上,如果是tar包,则需要先解包,解包命令为:tar –izxvf dbbackup20110809.tar,这里必须使用-i参数。然后执行恢复操作。

 

eg2:恢复单个数据库

1、cp /etc/my.cnf /mybak/

2、vim /mybak/my.cnf

3、vim /mybak/my.cnf 

datadir = /usr/local/mysql/data/phpcms   #确保该目录为空

4、然后执行如下操作

innobackupex --user=root --password=xxxxxx --defaults-file=/mybak/my.cnf --apply-log /mybak/2015-10-19_21-06-56/  

innobackupex --user=root --password=xxxxxx --defaults-file=/mybak/my.cnf --copy-back /mybak/2015-10-19_21-06-56/ 

5、将恢复后的数据,copy到指定的目录即可  

 

eg3:增量备份恢复:

 

增量备份恢复的步骤和完整备份恢复的步骤基本一致,只是应用日志的过程稍有不同。增量备份恢复时,是先将所有的增量备份挨个应用到完整备份的数据文件中,然后再将完整备份中的数据恢复到数据库中。命令如下:

 

应用第一个增量备份

innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --apply-log /mybak/2015-10-19_21-06-56/ --incremental-dir=/mybak/add/2015-10-19_21-48-20/  

应用第二个增量备份

innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --apply-log /mybak/2015-10-19_21-06-56/ --incremental-dir=/mybak/add/2015-10-19_21-48-54/  

将完整备份中的数据恢复到数据库中

innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --copy-back /mysqlbackup/full/2015-10-19_21-06-56/  

其中,--incremental-dir指定要恢复的增量备份的位置



(责任编辑:IT)