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流的形式产生备份时用来打包的工具。
#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命令拷贝备份文件至数据目录
# /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包下载地址: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
安装成功,再次执行备份命令,备份成功。