percona-xtrabackup完全及增量备份与恢复

一、简介

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

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

安装:其最新版的软件可从 http://www.percona.com/software/percona-xtrabackup/ 获得。本文基于centos6.x的系统,因此,直接下载相应版本的rpm包安装即可,这里不再演示其过程。

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; #开启二进制日志
[[email protected]]#innobackupex --user=root /mybackups/  #全量备份
[[email protected]]#service mysqld stop  #停止数据库,删除数据目录
[[email protected]]#rm -rf /mydata/data/*
[[email protected]]#innobackupex --apply-log /mybackups/2016-11-22_15-39-09/ #准备完全备份
[[email protected]]#innobackupex --copy-back /mybackups/2016-11-22_15-39-09/ #从完全备份中恢复数据
[[email protected] 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
[[email protected] data]# chown -R mysql.mysql ./* #改变属组和属组
[[email protected] 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
[[email protected] 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表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

[[email protected] 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
[[email protected] 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
[[email protected] 2016-11-22_19-06-45]# cat xtrabackup_binlog_info #当前正使用的二进制日志文件及其二进制位置
master-bin.000005	245
[[email protected] 2016-11-22_19-06-45]# cat xtrabackup_binary #备份中用到的xtrabackup的可执行文件
xtrabackup_55
[[email protected] 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
[[email protected] 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数据库,删除数据目录,进行数据恢复操作。


实现代码如下:

innobackupex --user=root /mybackups/ #第一次完全备份
innobackupex --incremental /mybackups/ --incremental-basedir=/mybackups/2016-11-22_19-24-37/ #第一次增量备份,向hellodb数据库中插入了表及其删除了表t1 
innobackupex --incremental /mybackups/ --incremental-basedir=/mybackups/2016-11-22_19-27-55/ #第二次增量备份,此时修改了数据库mydbs,创建了表和插入了数据
innobackupex --apply-log --redo-only /mybackups/2016-11-22_19-24-37/ #将已近提交的事务重放
innobackupex --apply-log --redo-only /mybackups/2016-11-22_19-24-37/ --incremental-dir=/mybackups/2016-11-22_19-27-55/ #重放之后,所有的备份数据合并到完全备份中
innobackupex --apply-log --redo-only /mybackups/2016-11-22_19-24-37/ --incremental-dir=/mybackups/2016-11-22_19-29-57/ #重放之后,所有的备份数据合并到完全备份中
innobackupex --copy-back /mybackups/2016-11-22_19-24-37/ #此时数据已经和最后一次增量同步,使用此数据进行恢复
[[email protected] data]# cd /mybackups/2016-11-22_19-24-37/
[[email protected] 2016-11-22_19-24-37]# cat xtrabackup_checkpoints
backup_type = full-prepared #第一次完全备份,重放后将和最后一次增量备份中的序列号信息一致
from_lsn = 0
to_lsn = 1708653
last_lsn = 1708653
compact = 0
[[email protected] 2016-11-22_19-24-37]# cat ../2016-11-22_19-29-57/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1703868
to_lsn = 1708653
last_lsn = 1708653
compact = 0
[[email protected] 2016-11-22_19-24-37]# cat xtrabackup_binlog_info
master-bin.000006    8434
[[email protected] 2016-11-22_19-24-37]# cat ../2016-11-22_19-29-57/xtrabackup_binlog_info
master-bin.000006    8434
[[email protected] 2016-11-22_19-24-37]#
[[email protected] data]# ll
总用量 18456
drwxr-xr-x. 2 root root     4096 11月 22 19:37 hellodb
-rw-r--r--. 1 root root 18874368 11月 22 19:37 ibdata1
drwxr-xr-x. 2 root root     4096 11月 22 19:37 mydb
drwxr-xr-x. 2 root root     4096 11月 22 19:37 mydbs
drwxr-xr-x. 2 root root     4096 11月 22 19:37 mysql
drwxr-xr-x. 2 root root     4096 11月 22 19:37 performance_schema
drwxr-xr-x. 2 root root     4096 11月 22 19:37 test
[[email protected] data]# chown -R mysql.mysql ./* 
[[email protected] data]# cd ../binlogs/
[[email protected] binlogs]# mysqlbinlog --start-position=245 master-bin.000007
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#161122 19:31:08 server id 1  end_log_pos 245 Start: binlog v 4, server v 5.5.32-MariaDB-log created 161122 19:31:08
# Warning: this binlog is either in use or was not closed properly.
BINLOG ‘
fCw0WA8BAAAA8QAAAPUAAAABAAQANS41LjMyLU1hcmlhREItbG9nAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAA2QAEGggAAAAICAgCAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA+1uD6g==
‘/*!*/;
# at 245
#161122 19:31:49 server id 1  end_log_pos 355 Querythread_id=9exec_time=0error_code=0
use `mydbs`/*!*/;
SET TIMESTAMP=1479814309/*!*/;
SET @@session.pseudo_thread_id=9/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create table students(id int,name varchar(20))
/*!*/;
# at 355
#161122 19:32:26 server id 1  end_log_pos 424 Querythread_id=9exec_time=0error_code=0
SET TIMESTAMP=1479814346/*!*/;
BEGIN
/*!*/;
# at 424
#161122 19:32:26 server id 1  end_log_pos 537 Querythread_id=9exec_time=0error_code=0
SET TIMESTAMP=1479814346/*!*/;
insert into students values (1,‘tom‘),(2,‘jerry‘)
/*!*/;
# at 537
#161122 19:32:26 server id 1  end_log_pos 564 Xid = 155
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET [email protected]_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
[[email protected] binlogs]# mysqlbinlog --start-position=245 master-bin.000007>/root/incr.sql
[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.32-MariaDB-log MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

MariaDB [(none)]>set sql_log_bin=0; 
MariaDB [hellodb]>source /root/incr.sql
MariaDB [hellodb]>set sql_log_bin=1;
MariaDB [hellodb]>use mydbs;
MariaDB [mydbs]> show tables;
+-----------------+
| Tables_in_mydbs |
+-----------------+
| students        |
| t1              |
+-----------------+
2 rows in set (0.00 sec)

MariaDB [mydbs]> select * from studnets;
ERROR 1146 (42S02): Table ‘mydbs.studnets‘ doesn‘t exist
MariaDB [mydbs]> select * from students;
+------+-------+
| id   | name  |
+------+-------+
|    1 | tom   |
|    2 | jerry |
+------+-------+
2 rows in set (0.00 sec)
MariaDB [mydbs]> use hellodb;
Database changed
MariaDB [hellodb]> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes           |
| coc               |
| courses           |
| scores            |
| students          |
| tbl               |
| teachers          |
| toc               |
+-------------------+
8 rows in set (0.00 sec)

MariaDB [hellodb]>

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

时间: 2024-10-07 06:00:53

percona-xtrabackup完全及增量备份与恢复的相关文章

Percona Xtrabackup备份mysql (完整备份与增量备份)

Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM 的备份同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热备 2.增量备份MySQL 3.流压缩到传输到其它服务器 4.能比较容易地创建主从同步 5.备份MySQL时不会增大服务器

Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份 同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热备 2.增量备份MySQL 3.流

Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)

Percona Xtrabackup备份mysql大数据库(完整备份与增量备份) 文章目录 [隐藏] Xtrabackup简介 Xtrabackup安装 Xtrabackup工具介绍 innobackupex使用方法 完整备份及还原 增量备份及还原 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁).XtraBackup支持所有的Percona

MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份]

MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份] 1.Xtrabackup的安装 MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份]

Percona Xtrabackup 备份MySQL 实例(转)

老规矩,开场白,刚开始用mysqldump,备份100G+的数据库,再加上服务器繁忙,备份速度像蜗牛似的,于是寻找更高效的备份方法.网上都说用xtrabackup比较适合备份大的数据库,而且备份效率也高,就尝试使用一次,结果明显感觉比mysqldump备份与恢复速度就是快不少,那以后就用它了.大礼拜日的在家也没事,结合生产环境,写了这篇文档,刚接触的朋友,可以参考下,不多说,入正题! 1.初次备份前准备工作 1.1 了解备份方式 热备份:读写不受影响(mysqldump-->innodb) 温备

Percona Xtrabackup快速备份MySQL

Percona Xtrabackup快速备份MySQL 提交 我的评论 加载中 已评论 Percona Xtrabackup快速备份MySQL 2015-07-10 Linux中国 Linux中国 Linux中国 微信号 linux-cn 功能介绍 面向Linux爱好者,提供Linux技术文章.新闻资讯和交流平台. 每天推送一条最新精选Linux资讯和技术文章:支持Linux命令查询.Linux资讯搜索及微信群的交流. 老规矩,开场白,刚开始用mysqldump,备份100G+的数据库,再加上服

Mysql1.5(binlog增量备份与恢复,innobackupex)

目录:一,增量备份与恢复 二,mysql主从同步 一增量备份与增量恢复: 1启用Mysql服务的binlog日志文件,实现对数据的实时增量备份 (1)binlog日志介绍 (2)启用binlog日志 (3)手动生成新的binlog日志文件 (4)删除已有的binlog日志文件 (5)使用binlog日志恢复数据 (1)binlog日志介绍: mysql数据库服务日志文件的一种,记录用户连接 数据库服务器之后,执行的除查询之外的sql命令. (2)启用binlog日志: 1,vim  /etc/m

Percona XtraBackup 关于 MySQL备份还原的详细测试

一. Percona XtraBackup 的优点. (1)无需停止数据库进行InnoDB热备: (2)增量备份MySQL: (3)流压缩传输到其它服务器: (4)在线移动表: (5)能够比较容易地创建主从同步: (6)备份MySQL时不会增大服务器负载. 二. Percona XtraBackup 工具集组成 在旧版本中,Percona XtraBackup 工具集里主要包含两个程序:innobackupex 和 xtrabackup. xtrabackup是C/C++编译的二进制程序,用来备

Percona Xtrabackup备份mysql(转)

原文:http://www.drupal001.com/2014/02/percona-xtrabackup-mysql/ Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热

Percona XtraBackup介绍

Percona XtraBackup开源的.免费的mysql热备软件,可以执行无阻塞备份InnoDB和XtraDB数据库. Percona XtraBackup有以下优点: ·备份快速.可靠 ·备份期间,不影响事务连续性 ·节省磁盘空间和网络带宽 ·自动验证备份 ·快速还原,降低系统停机时间 Percona XtraBackup支持Percona Server, MySQL, 和MariaDB所有版本的热备.支持流.压缩和增量mysql备份. Percona XtraBackup的一些特性: ·