xtrabackup 备份还原

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。

   Xtrabackup有两个主要的工具:xtrabackup、innobackupex

  (1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表

  (2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁。

  (3)备份的效率应该是MYSQL 自带工具 MYSQLDUMP 的 10倍左右

  

xtraBackup基于InnoDB的crash-recovery功能。它会复制innodb的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。

 InnoDB维护了一个redo log,又称为transaction log,事务日志,它包含了innodb数据的所有改动情况。当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做二步操作:

1.It applies committed transaction logentries to the data files

2.it performs an undo operation on anytransactions that modified data but did not commit.

 XtraBackup在备份的时候,一页一页地复制innodb的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的logpages复制走。为什么要急着复制走呢,因为transactions log文件大小有限,写满之后,就会从头再开始写,所以新数据可能会覆盖到旧的数据。

 在prepare过程中,XtraBackup使用复制到的transactions log对备份出来的innodb data file进行crash recovery


1.  下载:

   wget http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.1.6/binary/Linux/x86_64/percona-xtrabackup-2.1.6-702-Linux-x86_64.tar.gz

2. 解压:

  tar percona-xtrabackup-2.1.6-702-Linux-x86_64.tar.gz

3. 进入目录:

  cd percona-xtrabackup-2.1.5-Linux-x86_64

4. 复制:

cd bin 

cp * /usr/bin

下面就可以启动备份了

 

备份

1.全备份:

innobackupex --defaults-file=/etc/my.cnf --user=$user --password=$passwd   $backup_dir

  --user 用户名

  --password 密码

  --host 主机名

  -- defaults –file  配置文件,如果指定则必须是第一个参数

  -- port  端口

  --target-dir 备份的路径

  --slave-info  在salve上备份可使用该参数,将生成该备份的binlog最后pos位置写到xtrabackup_slave_info 文件中


 

2. 增量备份:

 innobackupex  --defaults-file=/etc/my.cnf  --user=$user --password=$passwd  --incremental --incremental-basedir=$backup_dir"/"$file  $backup_dir"_Log"

 

--incremental  进行增量备份的标示

--incremental-basedir  基于上一次备份的文件夹,,

 $backup_dir"_Log"  代表备份文件的目标文件

 

还原

1.  全备份还原

 innobackupex --defaults-file=/etc/my.cnf --user=$user--password=$passwd --apply-log --redo-only  $backup_dir"/"$file

 --apply-log : 表名将日志文件应用到全备份文件

 --redo-only  表名仅仅是redo log 文件 ,这个参数最好加上

 

2 .增量备份还原

innobackupex --defaults-file=/etc/my.cnf --user=$user--password=$passwd --apply-log $backup_dir --incremental-dir=$backup_dir_log

 $backup_dir 说明的是 全备份文件夹

 $backup_dir_log  说明是紧跟着全备份的增量备份


说明:

innobackupex是我们要使用的备份工具;

xtrabackup是被封装在innobackupex之中的,innobackupex运行时需要调用它;

xtrabackup_51是xtrabackup运行时需要调用的工具;

tar4ibd是以tar流的形式产生备份时用来打包的工具。


还原步骤如下:

1)停止数据库服务
#/etc/init.d/mysqld stop

2)准备(prepare)过程(前滚Innodb的redo日志)

#innobackupex --user=root --password=123456 --use-memory=4G --apply-log --export /tmp/backup20140108

可以指定内存使用大小

 

3)将备份文件拷贝回数据目录

#innobackupex --copy-back   /tmp/backup20140108

--copy-back 根据mysql的datadir将备份目录下的文件拷贝到数据目录,datadir目录必须为空

#\cp -rf /tmp/backup20140108/* /usr/local/mysql/data/

也可以手动通过cp命令拷贝备份文件至数据目录

 
4)赋权
# chown -R mysql:mysql /usr/local/mysql
 
5)启动mysql

# /etc/init.d/mysqld  start


 

错误解决:

备份时出错:

innobackupex --user=root --password=root --host=localhost --defaults-file=/etc/my.cnf  --port=3306   /backup 

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Inc 2009-2012.  All Rights Reserved.

This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

140109 20:25:47  innobackupex: Starting mysql with options:  --defaults-file='/etc/my.cnf' --password=xxxxxxxx --user='root' --host='localhost' --port='3306' --unbuffered --
140109 20:25:48  innobackupex: Connected to database with mysql child process (pid=30508)
140109 20:25:54  innobackupex: Connection to database server closed
IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex
           prints "completed OK!".

innobackupex: Using mysql  Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (x86_64) using readline 5.1
innobackupex: Using mysql server version Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

sh: --: invalid option
Usage:  sh [GNU long option] [option] ...
        sh [GNU long option] [option] script-file ...
GNU long options:
        --debug
        --debugger
        --dump-po-strings
        --dump-strings
        --help
        --init-file
        --login
        --noediting
        --noprofile
        --norc
        --posix
        --protected
        --rcfile
        --rpm-requires
        --restricted
        --verbose
        --version
        --wordexp
Shell options:
        -irsD or -c command or -O shopt_option          (invocation only)
        -abefhkmnptuvxBCHP or -o option
innobackupex: fatal error: no 'mysqld' group in MySQL options


这是因为没有安装 perl-DBI 和 perl-DBD-MySQL 导致的。

yum install perl-DBI
yum install perl-DBD-MySQL


安装DBD时又包错:

...
================================================================================
 Package               Arch          Version                  Repository   Size
================================================================================
Installing:
 perl-DBD-MySQL        x86_64        3.0007-2.el5             base        148 k
Installing for dependencies:
 mysql                 x86_64        5.0.95-5.el5_9           base        4.9 M


Transaction Summary
================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)


Total download size: 5.0 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): perl-DBD-MySQL-3.0007-2.el5.x86_64.rpm            | 148 kB     00:00     
(2/2): mysql-5.0.95-5.el5_9.x86_64.rpm                   | 4.9 MB     00:00     
--------------------------------------------------------------------------------

Transaction Check Error:
  file /etc/my.cnf from install of mysql-5.0.95-5.el5_9.x86_64 conflicts with file from package MySQL-server-5.6.14-1.linux_glibc2.5.x86_64
  file /usr/bin/my_print_defaults from install of mysql-5.0.95-5.el5_9.x86_64 conflicts with file from package MySQL-server-5.6.14-1.linux_glibc2.5.x86_64

....

Error Summary

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

默认会安装mysql5.0.95,因为我已经安装了mysql5.6.14,所以版本冲突导致。

单独安装perl-DBD-MySQL-3.0007-2.el5.x86_64.rpm包
cd /var/cache/yum/base/packages/
rpm -ivh perl-DBD-MySQL-3.0007-2.el5.x86_64.rpm
error: Failed dependencies:
        libmysqlclient.so.15()(64bit) is needed by perl-DBD-MySQL-3.0007-2.el5.x86_64
        libmysqlclient.so.15(libmysqlclient_15)(64bit) is needed by perl-DBD-MySQL-3.0007-2.el5.x86_64
原因分析:因为我安装的是mysql-5.6.14,它的 libmysqlclient,版本为libmysqlclient_r.so.16
解决方法,安装 MySQL-shared-compat 的rpm包,可以解决libmysqlclient.so 此类兼容性问题

下载地址:http://dev.mysql.com/downloads/mysql/5.6.html

下载MySQL-shared-compat-5.6.15-1.linux_glibc2.5.x86_64.rpm包,并安装

rpm -ivh MySQL-shared-compat-5.6.15-1.linux_glibc2.5.x86_64.rpm

可以查看包里面包含了各版本的libmysqlclient.so

rpm -qpl MySQL-shared-compat-5.6.14-1.linux_glibc2.5.x86_64.rpm

/usr/lib64/libmysqlclient.so.12
/usr/lib64/libmysqlclient.so.12.0.0
/usr/lib64/libmysqlclient.so.14
/usr/lib64/libmysqlclient.so.14.0.0
/usr/lib64/libmysqlclient.so.15
/usr/lib64/libmysqlclient.so.15.0.0
/usr/lib64/libmysqlclient.so.16
/usr/lib64/libmysqlclient.so.16.0.0
/usr/lib64/libmysqlclient_r.so.12
/usr/lib64/libmysqlclient_r.so.12.0.0
/usr/lib64/libmysqlclient_r.so.14
/usr/lib64/libmysqlclient_r.so.14.0.0
/usr/lib64/libmysqlclient_r.so.15
/usr/lib64/libmysqlclient_r.so.15.0.0
/usr/lib64/libmysqlclient_r.so.16
/usr/lib64/libmysqlclient_r.so.16.0.0

再次安装DBD

rpm -ivh perl-DBD-MySQL-3.0007-2.el5.x86_64.rpm

安装成功,再次执行备份命令,备份成功。

你可能感兴趣的:(xtrabackup 备份还原)