Percona XtraBackup 完全及增量备份与恢复

一、简介

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。其主要特点是备份过程快速、可靠,不会打断正在执行的事务,能够基于压缩等功能节约磁盘空间和流量,自动实现备份检测及其还原速度快。

二、安装及备份、恢复实现           

1 yum -y install percona-toolkit-2.2.4-1.noarch.rpm percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm

完全备份及删除数据目录实现恢复:

mysql>set session_sql_log_bin=0; #导入数据时让其不记录二进制日志
mysql>source /root/hellodb.sql  #导入数据
mysql>set session_sql_log_bin=1; #开启二进制日志
[root@centos6]#innobackupex --user=root /mybackups/  #全量备份
[root@centos6]#service mysqld stop  #停止数据库,删除数据目录
[root@centos6]#rm -rf /mydata/data/*
[root@centos6]#innobackupex --apply-log /mybackups/2016-11-22_15-39-09/ #准备完全备份
[root@centos6]#innobackupex --copy-back /mybackups/2016-11-22_15-39-09/ #从完全备份中恢复数据
[root@centos6 data]# ll #数据已然恢复成功
总用量 28688
drwxr-xr-x. 2 root root    4096 11月 22 15:43 hellodb
-rw-r--r--. 1 root root 18874368 11月 22 15:43 ibdata1
-rw-r--r--. 1 root root  5242880 11月 22 15:43 ib_logfile0
-rw-r--r--. 1 root root  5242880 11月 22 15:43 ib_logfile1
drwxr-xr-x. 2 root root    4096 11月 22 15:43 mysql
drwxr-xr-x. 2 root root    4096 11月 22 15:43 performance_schema
drwxr-xr-x. 2 root root    4096 11月 22 15:43 test
[root@centos6 data]# chown -R mysql.mysql ./* #改变属组和属组
[root@centos6 data]# ll
总用量 28688
drwxr-xr-x. 2 mysql mysql
  4096 11月 22 15:43 hellodb
-rw-r--r--. 1 mysql mysql 18874368 11月 22 15:43 ibdata1
-rw-r--r--. 1 mysql mysql  5242880 11月 22 15:43 ib_logfile0
-rw-r--r--. 1 mysql mysql  5242880 11月 22 15:43 ib_logfile1
drwxr-xr-x. 2 mysql mysql    4096 11月 22 15:43 mysql
drwxr-xr-x. 2 mysql mysql    4096 11月 22 15:43 performance_schema
drwxr-xr-x. 2 mysql mysql    4096 11月 22 15:43 test
[root@centos6 data]#service mysqld start #启动数据库,在恢复数据库时数据库无需启动

从安全角度考虑,如果要使用一个最小权限的用户进行备份,可创建此用户进行完全备份

mysql>create user 'bkuser'@'localhost' identified by 'passw ord'
mysql>revoke all privileges,grant option from 'bkuser';
mysql>grant reload,lock tables,replication clinet on *.* to 'bkuser'@'localhost'
mysql>flush privileges;

xtrabackup备份文件说明:

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

[root@centos6 2016-11-22_19-06-45]# ll
总用量 18472
-rw-r--r--. 1 root root      260 11月 22 19:06 backup-my.cnf
drwx------. 2 root root    4096 11月 22 19:06 hellodb
-rw-r-----. 1 root root 18874368 11月 22 19:06 ibdata1
drwx------. 2 root root    4096 11月 22 19:06 mydb
drwxr-xr-x. 2 root root    4096 11月 22 19:06 mysql
drwxr-xr-x. 2 root root    4096 11月 22 19:06 performance_schema
drwxr-xr-x. 2 root root    4096 11月 22 19:06 test
-rw-r--r--. 1 root root      13 11月 22 19:06 xtrabackup_binary
-rw-r--r--. 1 root root      24 11月 22 19:06 xtrabackup_binlog_info
-rw-r-----. 1 root root      89 11月 22 19:06 xtrabackup_checkpoints
-rw-r-----. 1 root root    2560 11月 22 19:06 xtrabackup_logfile
[root@centos6 2016-11-22_19-06-45]# cat xtrabackup_checkpoints
backup_type = full-backuped #备份类型,例如完全备份、增量备份等
from_lsn = 0 #日志序列号从0开始
to_lsn = 1649842 #日志序列号到哪
last_lsn = 1649842 #日志序列号到哪结束
compact = 0
[root@centos6 2016-11-22_19-06-45]# cat xtrabackup_binlog_info #当前正使用的二进制日志文件及其二进制位置
master-bin.000005  245
[root@centos6 2016-11-22_19-06-45]# cat xtrabackup_binary #备份中用到的xtrabackup的可执行文件
xtrabackup_55
[root@centos6 2016-11-22_19-06-45]# cat backup-my.cnf #备份命令中用到的配置选项信息
# This MySQL options file was generated by innobackupex.
 
# The MySQL server
[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=5242880
innodb_fast_checksum=0
innodb_page_size=16384
innodb_log_block_size=512
[root@centos6 2016-11-22_19-06-45]#

使用innobackupex进行增量备份及数据恢复:

每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。这正是InnoDB表可以进行增量备份的基础,即innobackupex通过备份上次完全备份之后发生改变的页面来实现。

要实现第一次增量备份,可以使用下面的命令进行:

# innobackupex --incremental /backup --incremental-basedir=BASEDIR

其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。

需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:

(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。

(2)基于所有的备份将未提交的事务进行“回滚”。

于是,操作就变成了:

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

接着执行:

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

而后是第二个增量:

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

 innobackupex --copy-back  /path/to/BACKUP-DIR #最起始的数据

其中BASE-DIR指的是完全备份所在的目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作

实例说明:本次实战练习增量数据的备份和恢复,在实验过程中经历过两次增量,并对相应的数据库做出了修改,增量完成后,停止mysql数据库,删除数据目录,进行数据恢复操作。

实现代码如下:

经过查看数据和删除数据目录前进行对比,如数据一致则代表数据恢复成功,xtrabackup+二进制日志可实现数据的完全备份、增量备份、完全备份恢复和增量数据恢复,同时在使用此款备份工具时,不会影响客户的正常访问,达到提高用户体验。

更多XtraBackup相关教程见以下内容

猜你喜欢

转载自www.linuxidc.com/Linux/2016-12/137894.htm