xtrabackup软件安装脚本

Xtrabackup软件安装

官网手册2.4=https://www.percona.com/doc/percona-xtrabackup/2.4/installation/yum_repo.html
官方手册8.0=https://www.percona.com/doc/percona-xtrabackup/8.0/index.html

#!/bin/bash
#PS=xtrabackup软件安装:
#官网手册2.4=https://www.percona.com/doc/percona-xtrabackup/2.4/installation/yum_repo.html 
#官方手册8.0=https://www.percona.com/doc/percona-xtrabackup/8.0/index.html
set -u
#查看系统版本
    read -p "请输入mysql账户:" Mysql_user
    read -s -p "请输入mysql密码:" Mysql_passwd 
    Mysql_Version=`mysql -u${Mysql_user} -p${Mysql_passwd} -e 'select version();' 2>/dev/null |egrep -v  'version()' |cut -d"." -f1`
    Backup_Time=`date  "+%Y-%m-%d_%H:%M"`
#下载软件包
function wget_package() {
    [ ! -d /var/package ] && mkdir /var/package
    case ${Mysql_Version} in 
    8)
        wget -P /var/package  https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm 
        v=8
        ;;
    *)  
        wget -P /var/package  https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.24/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.24-1.el7.x86_64.rpm
        v=1
        ;;
    esac
}
#xtrabackup软件安装-RPM
function install_rpm() {
    grep -Eo '/epel/|/extras/' -m2 /etc/yum.repos.d/*.repo  &&  yum yum makecache  || { echo "epel源或extras源不可用,无法安装xtrabackup软件依赖包";exit 1; }
    if [ ${v} -eq 1 ];then
        yum -y install /var/packagepercona-xtrabackup-24-2.4.24-1.el7.x86_64.rpm 2>/dev/null || { echo "请安装:install libev-devel";exit 1; }
    else
        yum -y install /var/package/percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm 2>/dev/null || { echo "请安装:install libev-devel";exit 1; }
    fi
}
#xtrabackup软件安装-Repository
function install_Repository() {
    #安装xtrabackup存储库
    yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm 
    #启动存储库
    percona-release enable-only tools release || exit 1
    #安装xtrabackup软件-默认安装最新款,如果需要更换,请自行yum list|grep percona
    if [ ${Mysql_Version} -eq 5 ];then
        yum -y install percona-xtrabackup-24
    else
        yum -y  install percona-xtrabackup-80
    fi
}

#基于xtrabackup软件的mysql库全备
function all_database_backup(){
[ ! -d /bakcup ] && mkdr /backup
    Backup_file="base-${Backup_Time}.sql"
    Backup_log="bakup-log${Backup_Time}"
    touch /bakup/log/${Backup_log}
    xtrabackup -u${Mysql_user} -p${Mysql_passwd} --backup --target-dir=/backup/${Backup_file} && echo "/backup/${Backup_file}" > /bakup/log/${Backup_log}
}

#基于xtrabackup软件的mysql库全备-还原
function all_prepare(){
    #预准备:确认数据一致,提交完成的事务,回滚未完成的事务;
    rpm -qa |grep -Ei 'xtrabackup' || echo "需安装xtrabackup软件"
    read -p "请输入全备的路径:" Path
        xtrabackup --prepare --target-dir=${Path} || exit 3
        
    #确保mysql服务未启动,且主目录为空,默认为:/var/lib/mysql
    ss -ntlp |grep mysqld  &>/dev/null  && { echo "需关闭mysql服务";exit 3; }
    [ -e /var/lib/mysql ] || { echo "需清空mysql目录"; exit 3; }
    #拷贝备份数据至对端,或本地直接复原
    read -p "是否拷贝数据至远端服务器(y/n)" Options
    case $Options in
        Yes|yes|Y|y)
                read -p "请输入远端服务器地址:"  Target_ipaddr
                read -s -p "请输入目标服务器密码"  Target_Password
                expect <<EOF
                swpan  scp -r ${Path} ${Target_ipaddr}/backup
                expect {
                        "yes/no" { send "yes\n";exp_continue }
                        "password" { send "${Target_Password}\n" }
                        }
                expect "#" { send "exit\n" }
                expect eof
EOF
                ;;
        No|no|N|n)
                xtrabackup --copy-back --target-dir=${Path}  && chown -R mysql.mysql /var/lib/mysql
                systemctl start mysqld || systemctl start mariadb
                ;;
    esac
}

#基于基于xtrabackup软件的mysql库全备的增量备份
function cron_inc() {
    #输入一次全备路径,做一次初始增量,后续周一到周六的凌晨2点做一次增量
    inc=inc-${Backup_Time}.sql
    [ -e ${Path} ] && read -p "请输入全备的路径:" Path
        xtrabackup -u${Mysql_user} -p${Mysql_passwd} --backup --target-dir=/backup/${inc}.sql --incremental-basedir=${Path}
        echo ${inc} >> /backup/inc.log
    [ -f /backup/inc.log ] || exit 4
    touch /backup/cron/inc_cron.sh && chmod 755 /backup/cron/inc_cron.sh
    echo $PTAH > /backup/cron/inc_cron.sh
    tee /backup/inc_cron.sh <<EOF
        inc=`cat /backup/inc.log |tail -1` 
                xtrabackup  -u${Mysql_user} -p${Mysql_passwd} --backup --target-dir=/backup/inc-\${Backup_Time}.sql --incremental-basedir=${inc}
                echo /backup/inc-\${Backup_Time} >> /backup/inc.log
EOF
        sed -r '/.*inc=.*/i\        Backup_Time=`date "+%Y-%m-%d_%H:%M"`\' /backup/cron/inc_cron.sh
        tee /etc/cron.d/inc_cron <<EOF
        2 * * * 1-6  root sh /backup/cron/inc_cron.sh
EOF
}
function inc_prepare(){
        read -p"请输入all备份的路径" All_path
        read -p"请输入第一次增量备份的路径" Inc_path_1
        read -p"请输入第二次增量备份的路径" Inc_path_2
        #预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务
        xtrabackup --prepare --apply-log-only --target-dir=${All_path}
        #合并第一次增量备份
        xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=${Inc_path_1}
        #合并第最后一次增量备份
        xtrabackup --prepare --target-dir=/backup/base --incrementaldir=${Inc_path_2}
        #还原数据
        xtrabackup --copy-back --target-dir=${All_path}
        #权限
        chown -R mysql:mysql /var/lib/mysql
        #启动mysql
        systemctl start mysqld || systemctl start mariadb

}


PS3="请选择:(1-6):"
select MENU in  RPM包安装 源仓库安装 完全备份 基于完全备份的还原 增量备份并生成计划任务 退出 ;do
case $REPLY in
        1)
                install_rpm
                ;;
        2)
                install_Repository
                ;;
        3)
                all_database_backup
                ;;
        4)
                all_prepare
                ;;
        5)
                cron_inc
                ;;
        6)
                exit 0
                ;;
esac
done

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值