XtraBackup使用手册

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}

转载于:https://my.oschina.net/deepblue/blog/529374

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值