一、安装

  1. 下载https://www.percona.com/downloads/XtraBackup/

    先下载了percona-xtrabackup-24-2.4.4-1.el5.x86_64.rpm,安装报libcurl.so.3 与 libev.so.4找不到,libev.so.3 可以通yum install libev解决,但是libcurl.so.3通过做软链接(cd /usr/lib64   ln -s libcurl.so.4 libcurl.so.3 )或者从别的系统复制一份 不能解决,放弃

  2. 下载percona-xtrabackup-2.2.10-1.el5.x86_64.rpm安装,安装前要保证perl已安装

    yum install perl-DBI
    yum install perl-DBD-MySQL
    yum install perl-Time-HiRes
    yum install perl-IO-Socket-SSL

    否则会报 perl(Time::HiRes) is needed ....等

  3. 下载percona-toolkit-2.2.18-1.noarch.rpm并安装,必须先安装perl的termreadkey模块,yum install perl-TermReadKey

     

  4. 安装完后使用会报如下错误

     [root@centos mysql]# innobackupex --user=root --password=root ./backup/
     
     InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
     and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.
     
     This software is published under
     the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
     
     Get the latest version of Percona XtraBackup, documentation, and help resources:
     http://www.percona.com/xb/p
     
     160726 10:01:20  innobackupex: Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup' as 'root'  (using password: YES).
     innobackupex: got a fatal error with the following stacktrace: at /usr/bin/innobackupex line 2998
             main::mysql_connect('abort_on_error', 1) called at /usr/bin/innobackupex line 1539
     innobackupex: Error: Failed to connect to MySQL server as DBD::mysql module is not installed at /usr/bin/innobackupex line 2998.

     

     其实系统里已经有

    [root@centos mysql]# rpm -qa|egrep 'perl'
    perl-ExtUtils-MakeMaker-6.55-141.el6_7.1.x86_64
    perl-Net-SSLeay-1.35-10.el6.x86_64
    perl-Module-Pluggable-3.90-141.el6_7.1.x86_64
    perl-Time-HiRes-1.9721-141.el6_7.1.x86_64
    perl-DBD-MySQL-4.013-3.el6.x86_64
    perl-libs-5.10.1-141.el6_7.1.x86_64
    perl-5.10.1-141.el6_7.1.x86_64
    perl-Test-Harness-3.17-141.el6_7.1.x86_64
    perl-TermReadKey-2.30-13.el6.x86_64
    perl-Pod-Simple-3.13-141.el6_7.1.x86_64
    perl-Net-LibIDN-0.12-3.el6.x86_64
    perl-DBI-1.609-4.el6.x86_64

    

        于是打算卸掉perl-DBI重装,结果没注意,把有依赖的其它包也删了

        [root@centos mysql]#  yum erase perl-DBI

         ……。

         Dependencies Resolved
 
 ================================================================================
  Package                Arch      Version            Repository            Size
 ================================================================================
 Removing:
  perl-DBI               x86_64    1.609-4.el6        @base/$releasever    1.7 M
 Removing for dependencies:
  MariaDB-server         x86_64    5.5.50-1           @mariadb             135 M
  akonadi                x86_64    1.2.1-3.el6        @base/$releasever    1.8 M
  kdepim                 x86_64    6:4.3.4-6.el6      @base/$releasever     21 M
  kdepim-libs            x86_64    6:4.3.4-6.el6      @base/$releasever     20 M
  kdepim-runtime         x86_64    4.3.4-5.el6        @base/$releasever    3.2 M
  kdepim-runtime-libs    x86_64    4.3.4-5.el6        @base/$releasever    834 k
  kdepimlibs-akonadi     x86_64    4.3.4-4.el6        @base/$releasever    1.2 M
  percona-toolkit        noarch    2.2.18-1           installed            5.7 M
  percona-xtrabackup     x86_64    2.2.10-1.el5       installed             21 M
  perl-DBD-MySQL         x86_64    4.013-3.el6        @base/$releasever    338 k

        

    只好挨个再重装,重装后,xtrabackup使用正常

    yum erase  的时候一定要小心,可以使用reinstall

二、使用

    1.备份

        innobackupex --user=root --password=root  /var/lib/mysql/backup/

        会在 backup下生成目录 2016-07-26_15-12-31,里面包含了物理备份及相关信息

    2.恢复

         停止mysql

        prepare

            innobackupex --user=root --password=root --apply-log /var/lib/mysql/backup/2016-07-26_15-12-31/

        restore

            /bin/cp -rf /var/lib/mysql/backup/2016-07-26_15-12-31/* /var/lib/mysql/

        设置权限,否则会出现不能建表的错误

            chown -R mysql.mysql /var/lib/mysql/ 

        启动mysql

        recover

            通过xtrabackup_binlog_info 找到当时备份的点,然后从这个点读取binlog日志,导入到数据库中

     

 

官方原理

在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。

Xtrabackup在启动时会记住log sequence number(LSN),并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。Xtrabackup必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。

上面就是xtrabackup的备份过程。接下来是准备(prepare)过程。在这个过程中,xtrabackup使用之前复制的事务日志,对各个数据文件执行灾难恢复(就像mysql刚启动时要做的一样)。当这个过程结束后,数据库就可以做恢复还原了。

以上的过程在xtrabackup的编译二进制程序中实现。程序innobackupex可以允许我们备份MyISAM表和frm文件从而增加了便捷和功能。Innobackupex会启动xtrabackup,直到xtrabackup复制数据文件后,然后执行FLUSH TABLES WITH READ LOCK来阻止新的写入进来并把MyISAM表数据刷到硬盘上,之后复制MyISAM数据文件,最后释放锁。

备份MyISAM和InnoDB表最终会处于一致,在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而不是回滚到xtrabackup刚开始时的点。这个时间点与执行FLUSH TABLES WITH READ LOCK的时间点相同,所以myisam表数据与InnoDB表数据是同步的。类似oracle的,InnoDB的prepare过程可以称为recover(恢复),myisam的数据复制过程可以称为restore(还原)。

Xtrabackup和innobackupex这两个工具都提供了许多前文没有提到的功能特点。手册上有对各个功能都有详细的介绍。简单介绍下,这些工具提供了如流(streaming)备份,增量(incremental)备份等,通过复制数据文件,复制日志文件和提交日志到数据文件(前滚)实现了各种复合备份方式

 

 

 

参考:http://blog.163.com/ji_1006/blog/static/10612341201382355716623/