您的位置:首页 > 数据库 > MySQL

XtraBackup使用手册

2015-11-12 14:47 225 查看

XtraBackup使用手册

[TOC]
##XtraBackup安装
yum安装方法:

rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

##XtraBackup备份预备工作

xtrabackup需要连接到数据库和datadir操作权限。
xtrabackup或者innobackupex在使用过程中设计到2类用户权限:

系统用户,用来调用innobackupex或者xtrabackup

数据库用户,数据库内使用的用户
###连接到服务
innobackupex或者xtrabackup通过–user和–password连接到数据库服务

innobackupex --user=DBUSER --password=SECRET /path/to/backup/dir/

###其他连接选项
| Option |Description|
|------------|-----------|
|--port|The port to use when connecting to the database server with TCP/IP|
|--socket|The socket to use when connecting to the local database|
|--host|The host to use when connecting to the database server with TCP/IP|

##全备和全备还原
###使用innobackupex创建全备
####创建全备

innobackupex --user=DBUSER --password=DBUSERPASS /niub/xtrabackup/base/

会输出一下信息:

innobackupex: Backup created in directory '/niub/xtrabackup/base/2015-11-04_14-24-43'
innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 1946
innobackupex: completed OK!

从信息中会发现备份被创建在
/niub/xtrabackup/base/2015-11-04_14-24-43

其他选项:

--no-timestamp,指定了这个选项备份会直接备份在BACKUP-DIR,不再创建时间戳文件夹。

--default-file,指定配置文件,用来配置innobackupex的选线。

####预备备份

创建完备份之后数据被没有马上可以被还原,需要回滚未提交事务,前滚提交事务,让数据库文件保持一致性。

innobackupex使用—apply-log来做预备备份

innobackupex --apply-log /path/to/BACKUP-DIR

成功则会输出:

111225  1:01:57  InnoDB: Shutdown completed; log sequence number 1609228
111225 01:01:57  innobackupex: completed OK!

成功后,备份可以被用来还原数据库了。
###使用innobackupex还原全备
使用innobackupex –copy-back来还原备份

innobackupex --copy-back /path/to/BACKUP-DIR

注:
datadir
必须是为空的,
innobackupex –copy-back
不会覆盖已存在的文件,还要注意,还原时需要先关闭服务,如果服务是启动的,那么就不能还原到
datadir


还原脚本:

#!/bin/bash
db_data=/niub/mysqldata
base_dir=/niub/xtrabackup/base/2015-11-04_14-24-43
service mysql stop
rm -rf $db_data/*
innobackupex --copy-back $base_dir
chown -R mysql:mysql $db_data/*
service mysql start

##增量备份和还原
增量备份呢是为了减少空间使用和备份的时间。

增量备份的实现,依赖于innodb页上面的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。

增量备份会复制指定LSN之后的所有数据页。

###创建增量备份
####创建全备
在创建增量备份之前需要一个全备,不然增量备份是没有意义的。

innobackupex --user=DBUSER --password=DBUSERPASS /niub/xtrabackup/base/

这样就会在
/niub/xtrabackup/base/
下创建一个时间戳文件夹,如
/niub/xtrabackup/base/2015-11-04_14-24-43
,然后文件夹内是备份文件。

检查备份文件夹下的
xtrabackup-checkpoints
,会有一下信息:

backup_type = full-backuped
from_lsn =0
to_lsn =1291135

####增量备份

然后使用
—incremental
创建增量备份

innobackupex --defaults-file=/etc/my.cnf --user=$user --password=$password --incremental $INCREMENTAL_DIR --incremental-basedir=$BASEDIR


$BASEDIR
指向之前的全备目录,如:
/niub/xtrabackup/base/2015-11-04_14-24-43


$INCREMENTAL_DIR
为增备目录,如:
/niub/xtrabackup/incremental


然后查看增备目录下的
xtrabackup-checkpoints
:

backup_type = incremental
from_lsn =1291135
to_lsn =1352113

确保全备目录下的
xtrabackup-checkpoints
to_lsn
与增备中的
from_ls
相等


###还原增量备份
在全备上,使用—redo-only只做已提交事务,不回滚未提交事务

innobackupex --apply-log --redo-only $BASE-DIR

会出现以下结果:

innobackupex: completed OK!

####应用增量备份

innobackupex --apply-log --redo-only $BASE-DIR --incremental-dir= $INCREMENTAL_DIR

####回滚未提交事务
当应用完所有增量备份的时候,就需要回滚所有为完成事务。

innobackupex --apply-log $BASE-DIR

####还原增量备份

还原增量备份其实和还原全备一样

使用
innobackupex –copy-back
来还原备份

innobackupex --copy-back /path/to/BACKUP-DIR

注:
datadir
必须是为空的,
innobackupex –copy-back
不会覆盖已存在的文件,还要注意,还原时需要先关闭服务,如果服务是启动的,那么就不能还原到
datadir


还原脚本

#!/bin/bash
db_data=/niub/mysqldata
base_dir=/niub/xtrabackup/base/2015-11-04_14-24-43
service mysql stop
rm -rf $db_data/*
innobackupex --copy-back $base_dir
chown -R mysql:mysql $db_data/*
service mysql start

###全备和增备脚本

#!/bin/bash

user="root"
password=PASSWORD
base_dir='/niub/mysql_xtrabackup'

mysql_date=`date +%Y%m%d`
old_date=`date -d "5 day ago" +%Y%m%d`

if [ -f /root/scripts/mysql_xtrabackup_status ];then
last_base_date=`head -1 /root/scripts/mysql_xtrabackup_status | awk '{print $2}'`
if [ "$last_base_date" == "$old_date" ];then
rm -rf ${base_dir}/base/*
innobackupex --defaults-file=/etc/my.cnf --user=$user --password=$password  ${base_dir}/base
echo "mysql_xtrabackup_base $mysql_date" > /root/scripts/mysql_xtrabackup_status
echo "`date` -- mysql base create" >> /root/scripts/mysql_xtrabackup.log
else
if [ ! -d ${base_dir}/increment/${mysql_date} ];then
mkdir -p ${base_dir}/increment/${mysql_date}
fi
base_name=`ls ${base_dir}/base`
innobackupex --defaults-file=/etc/my.cnf --user=$user --password=$password --incremental-basedir=${base_dir}/base/${base_name} --incremental ${base_dir}/increment/${mysql_date}/
echo "`date` -- mysql increment" >> /root/scripts/mysql_xtrabackup.log
fi
else
echo "mysql_xtrabackup_base $mysql_date" > /root/scripts/mysql_xtrabackup_status
rm -rf ${base_dir}/base/*
innobackupex --defaults-file=/etc/my.cnf --user=$user --password=$password  ${base_dir}/base
echo "`date` -- mysql base create" >> /root/scripts/mysql_xtrabackup.log
fi

detlet_time=`date +%H%M`
if [ "$detlet_time" == "0130" ];then
rm -rf ${base_dir}/increment/${old_date}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql XtraBackup