【mysql使用xtrabackup做全量增量备份】mysql_backup.sh

#!/bin/bash
#
# 2014/12/16
# v5.1
# increment backup, with timestamp, compressed, with master & slave.

######################
s_port="$1"
s_action="$2"
s_slave="$3"

#####  配置参数  ######
##
f_my_cnf="/data/svr/mysql/my.cnf.${s_port}"
d_bak_base="/data/backup/mysql/${s_port}"
s_copies=6
s_password="xxx"
##

####################### 用法
function usage() {
    cat <<EOF

[-] 用法: $0 port [full|incr|full_tar|full_stream] [slave]

$0 3306 full &              全备份,未压缩;完成后压缩前一天的备份;
$0 3306 incr &              增量备份,未压缩;完成后压缩前一天的备份;
$0 3306 full_tar &          全备份,未压缩;完成后,压缩这个备份;
$0 3306 full_stream &       全备份,边备份边压缩,stream=tar模式;

[-] 针对slave实例:
$0 3306 full slave &
$0 3306 incr slave &
$0 3306 full_tar slave &
$0 3306 full_stream slave &

[-] 针对crontab的配置:
+------------------------------+
# [mysql]
0 0 * * 6 $0 3306 full &
0 0 * * 0-5 $0 3306 incr &
+------------------------------+

EOF
    exit 2
}

#######################
test ${s_port} -gt 0
if [ $? -gt 0 ]; then
    echo "[+] Tips: 端口没有指定或者有误;"
    usage
    exit 3;
fi

if [ -z ${s_slave} ]; then
    s_args="--defaults-file=${f_my_cnf} --host=127.0.0.1 --port=${s_port} --user=root --password=${s_password}"
else
    s_args="--defaults-file=${f_my_cnf} --host=127.0.0.1 --port=${s_port} --user=root --password=${s_password} --slave-info --safe-slave-backup"
fi

d_bak_gz="${d_bak_base}/gz"
d_bak_tmp="${d_bak_base}/tmp"
d_bak_log="${d_bak_base}/log"
d_bak_full="${d_bak_base}/full"
f_bak_stream="${d_bak_full}/mysql-stream-$(date +%F).gz"

[ -d ${d_bak_gz} ] || mkdir -p ${d_bak_gz}
[ -d ${d_bak_tmp} ] || mkdir -p ${d_bak_tmp}
[ -d ${d_bak_log} ] || mkdir -p ${d_bak_log}
[ -d ${d_bak_full} ] || mkdir -p ${d_bak_full}

###################### 清理旧备份
function do_cleanup() {
    echo "[-] `date` delete old files over ${s_copies} days ... "
    find ${d_bak_gz} -type f -name "*.gz" -mtime +${s_copies} -print
    find ${d_bak_gz} -type f -name "*.gz" -mtime +${s_copies} -delete
    find ${d_bak_full} -type f -name "*.gz" -mtime +${s_copies} -print
    find ${d_bak_full} -type f -name "*.gz" -mtime +${s_copies} -delete
    find ${d_bak_log} -type f -name "*.log" -mtime +${s_copies} -print
    find ${d_bak_log} -type f -name "*.log" -mtime +${s_copies} -delete

    echo "[-] `date` done."
}

###################### 压缩今天之前的目录,清理旧备份
function do_tar_yesterday() {
    local s_yesterday=$(date -d "1 day ago" +%F)

    echo "[-] `date` waiting for file compression process ..."
    cd ${d_bak_tmp}
    ls |grep -v "`date +%F`" |xargs -i tar zcf "{}.tar.gz" {} --remove-files
    echo "[-] `date` move: `ls *.gz` to: ${d_bak_gz}"
    mv *.gz ${d_bak_gz}
   
    do_cleanup
}

###################### 压缩指定目录
function do_tar() {
    echo "[-] `date` waiting for file compression process ..."
    cd ${d_bak_full}
    ls |grep -v ".gz" |xargs -i tar zcf "{}.tar.gz" {} --remove-files

    do_cleanup
}

###################### 全备份,未压缩;完成后压缩前一天的备份;
function do_full() {
    echo "[+] `date` +------------------------Start--------------------+"
    innobackupex ${s_args} ${d_bak_tmp}
    echo "[-] `date` +------------------------cleanup------------------+"
    do_tar_yesterday
    echo "[-] `date` +------------------------The End------------------+"
}

###################### 增量备份,未压缩;完成后压缩前一天的备份;
function do_increment() {
    echo "[+] `date` +------------------------Start--------------------+"
    innobackupex --incremental ${s_args} ${d_bak_tmp}
    echo "[-] `date` +------------------------cleanup------------------+"
    do_tar_yesterday
    echo "[-] `date` +------------------------The End------------------+"
}

###################### 全备份,未压缩;完成后,压缩这个备份;
function do_full_tar() {
    echo "[+] `date` +------------------------Start--------------------+"
    innobackupex ${s_args} ${d_bak_full}
    echo "[-] `date` +------------------------cleanup------------------+"
    do_tar
    echo "[-] `date` +------------------------The End------------------+"
}

###################### 全备份,边备份边压缩,stream=tar模式;
function do_full_stream() {
    echo "[+] `date` +------------------------Start--------------------+"
    innobackupex --stream=tar ${s_args} ${d_bak_full} |gzip >${f_bak_stream}
    echo "[-] `date` +------------------------cleanup------------------+"
    do_cleanup
    echo "[-] `date` +------------------------The End------------------+"
}

#################### 
case ${s_action} in
    full)
        do_full >"${d_bak_log}/$(date +%F_%H-%M-%S).log" 2>&1
        ;;
    incr)
        do_increment >"${d_bak_log}/$(date +%F_%H-%M-%S).log" 2>&1
        ;;
    full_tar)
        do_full_tar >"${d_bak_log}/$(date +%F_%H-%M-%S).log" 2>&1
        ;;
    full_stream)
        do_full_stream >"${d_bak_log}/$(date +%F_%H-%M-%S).log" 2>&1
        ;;
    *)
        usage
        ;;
esac
时间: 2024-10-05 23:22:59

【mysql使用xtrabackup做全量增量备份】mysql_backup.sh的相关文章

MySQL数据库之Percona全量增量备份与恢复

一.概述: mysqldump是由MySQL-Commiunity提供的MySQL数据库备份的工具,但是只能用于全量备份,如果要实现增量备份需要基于binlog日志实现. 本文介绍使用第三方软件Percona提供的命令innobackupex做全量备份.增量备份以及恢复的方法.percona-xtrabackup主要是有两个工具,其中一个是xtrabackup,专门用于备份InnoDB表,另一个是innobackupex,是前者封装后的一个perl脚本,同时支持备份InnoDB和MyISAM.在

使用mysqldump进行全量+增量备份方案操作记录

在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景:每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是MySQL打开binlog日志功能,在my.cnf中加入log-bin=/opt/Data/MySQL-bin"log-bin="后的字符串为日志记载目录,一般建议放在不同于MySQL数据目录的磁盘

mysqldump全量+增量备份

mysqldump全量备份 每周执行 mysqldump -uroot -p --flush-logs --single-transaction --all-database >/home/1.sql 增量备份 当需要增量备份的时候 mysql>flush logs mysql>show master status; 如显示mysql-bin.000005 备份mysql-bin.000004即可 还原时,先还原全量备份然后还原增量,还原时关闭mysql-bin日志, mysql>

Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录

在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景:每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是MySQL打开binlog日志功能,在my.cnf中加入log-bin=/opt/Data/MySQL-bin"log-bin="后的字符串为日志记载目录,一般建议放在不同于MySQL数据目录的磁盘

Mysql使用innobackupex在线备份方案(全量+增量)操作记录

在日常的linux运维工作中,对mysql数据库的备份是非常重要的一个环节.关于mysql的备份和恢复,比较传统的是用mysqldump工具.今天这里介绍下另一款mysql备份工具innobackupex,利用它对mysql做全量和增量备份,仅仅依据本人实战操作做一记录,如有误述,敬请指出~ 一.innobackupex的介绍Xtrabackup是由percona开发的一个开源软件,是使用perl语言完成的脚本工具,能够非常快速地备份与恢复mysql数据库,且支持在线热备份(备份时不影响数据读写

Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳理Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录 废话不多说,下面即是使用lvm-snapshot快照方式备份mysql的操作记录,仅依据本人实验中使用而述. 操作记录:如下环

xtrabackup实现全量备份和增量备份

mysql增量和完全备份innobackupex2.1.9版本1 yum安装: 官网地址:https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/yum_repo.htmlyum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpmyum list | grep per

10.Solr4.10.3数据导入(DIH全量增量同步Mysql数据)

转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.创建MySQL数据 create database solr; use solr; DROP TABLE IF EXISTS student; CREATE TABLE student ( id char(10) NOT NULL, stu_name varchar(50) DEFAULT NULL, stu_sex int(1) DEFAULT NULL, stu_address varchar(20

MySQL性能优化:分表、增量备份、还

对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻辑上可以划分.一个好的划分依据,有利于程序的简单实现,也可以充分利用水平分表的优势.比如系统界面上只提供按月查询的功能,那么把表按月拆分成12个,每个查询只查询一个表就够了.如果非要按照地域来分,即使把表拆的再小,查询还是要联合所有表来查,还不如不拆了.所以一个好的拆分依据是 最重要的.关键字:UNION 例: 订单表根据订单