mysql备份恢复之xtrabackup

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql备份恢复之xtrabackup相关的知识,希望对你有一定的参考价值。

   xtrabackup: 由percona提供,取代ibbackup备份工具.用来备份其xtradb引擎数据,xtradb本身就是InnoDB增强版完全兼容InnoDB,只支持MyISAM温备,更多高级特性支持InnoDB.

   xtrabackup高级功能依赖于mysql InnoDB引擎是否启用每表单个表空间,否则不能使用单表导入导出

 

   特点:    

      (1)备份过程快速、可靠

      (2)备份过程不会打断正在执行的事务

      (3)能够基于压缩等功能节约磁盘空间和流量

      (4)自动实现备份检验

      (5)还原速度快

 

  安装percona xtrabackup工具:

[[email protected] mydata]# yum -y install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL               主要安装 perl-DBD-MySQL perl-Time-HiRes包

rpm -ivh libev4-Version.x86_64.rpm 依赖于libev4 64位版本RPM包
rpm -ivh percona-xtrabackup-2.3.2-1.el6.x86_64.rpm

  常用选项:  

   --host     指定主机

   --user     指定用户名

   --password    指定密码

   --port      指定端口

   --databases     指定数据库

   --incremental    创建增量备份

   --incremental-basedir   指定包含完全备份的目录

   --incremental-dir      指定包含增量备份的目录   

   --apply-log        对备份进行预处理操作             

     一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

   --redo-only      不回滚未提交事务

   --copy-back     恢复备份目录

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

  备份的同时,innobackupex还会在备份目录中创建如下文件:

   (1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

   (2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

   (3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。

   (4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

   (5)backup-my.cnf —— 备份命令用到的配置选项信息;

在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。

  如果要使用一个最小权限的用户进行备份,则可基于如下命令创建此类用户:

   mysql> CREATE USER ‘backuser‘@‘localhost‘ IDENTIFIED BY ‘backuser‘   创建用户

   mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM ‘backuser‘@‘localhost‘; 回收此用户所有权限

   mysql> GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO ‘baskuser‘@‘localhost‘;

         授权刷新、锁定表、用户查看服务器状态

   mysql> FLUSH PRIVILEGES;   刷新授权表


 备份过程 :

   注意:备份时需启动MySQL,恢复时需关闭MySQL,清空mysql数据目录且不能重新初始化,恢复数据后应该立即进行一次完全备份

   完全备份:

     innobackupex --user=backuser --password=backuser /backup/xtrabackup/

       备份会自动生成以当前日期时间结尾的文件

   增量备份1:

     innobackupex --user=backuser --password=backuser --incremental /backup/xtrabackup/ --incremental-basedir=/backup/xtrabackup/2016-06-14_16-37-07/   basedir指定完全备份

   增量备份2:

     innobackupex --user=backuser --password=backuser --incremental /backup/xtrabackup/ --incremental-basedir=/backup/xtrabackup/2016-06-14_16-44-03/   basedir指定增量备份1

   导出崩溃前二进制日志:     

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000028 |      4200|              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

   mysqlbinlog mysql-bin.000028 --start-position=3204 --stop-position=4200 > /backup/xtrabackup/increment.sql      查看增量备份所处文件及位置,导出崩溃前数据


  恢复过程:

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

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

      (2)基于所有的备份将未提交的事务进行“回滚”   需要使用选项--apply-log --redo-only


   预处理完全备份:

     innobackupex --apply-log --redo-only /backup/xtrabackup/2016-06-14_16-37-07/   

   预处理增量备份1: 

     innobackupex --apply-log --redo-only /backup/xtrabackup/2016-06-14_16-37-07/ --incremental-dir=/backup/xtrabackup/2016-06-14_16-44-03/

   预处理增量备份2:

     innobackupex --apply-log --redo-only /backup/xtrabackup/2016-06-14_16-37-07/ --incremental-dir=/backup/xtrabackup/2016-06-14_16-45-26/

   恢复完全备份:    因为前面增量备份已经预处理至完全备份

     innobackupex --copy-back 2016-06-14_16-37-07/

   恢复崩溃前二进制日志:

     mysql> SET sql_log_bin=0;        关闭二进制日志功能

     mysql> SOURCE /backup/xtrabackup/increment.sql;     恢复二进制日志备份

     mysql> SET sql_log_bin=1;        恢复完成开启二进制日志

     mysql> FLUSH PRIVILEGES;           恢复完成重读授权表

 

  在启动mysqld服务之前还需要事先修改数据文件的属主和属组

     chown -R  mysql:mysql  /mydata/data/

     cat /backup/xtrabackup/2016-06-14_16-45-26/xtrabackup_binlog_info     

        查看增量备份2的日志文件及位置

     cat /backup/xtrabackup/2016-06-14_16-37-07/ xtrabackup_binlog_info     

        查看完全备份的日志文件及位置与增量备份2是否一致

 

如果最后一次增量备份有未提交事务,则只能MySQL启动后自动修复,类似MySQL崩溃后修复动作


至此使用xtrabackup备份、恢复mysql完成,如有错误请大家指教!

本文出自 “Why no !” 博客,请务必保留此出处http://mydove.blog.51cto.com/8487472/1790820

以上是关于mysql备份恢复之xtrabackup的主要内容,如果未能解决你的问题,请参考以下文章

mysql备份恢复之xtrabackup

Mysql不锁表备份之Xtrabackup的备份与恢复

xtrabackup之Innobackupex增量备份及恢复

数据库 之 备份工具Xtrabackup进行MySQL备份

MySQL之XtraBackup实现完全备份增量备份数据还原

Mysql 备份恢复与 xtrabackup备份