初级DBA需要掌握的数据库操作-备份

Oracle

备份Oracle

#!/bin/bash
source /home/oracle/.bash_profile
#设置中文防止乱码
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#获取时间戳
export BAKUPTIME=`date +%Y%m%d%H%M%S`
#dump文件生成目录
export DATA_DIR=/data/backup_oracle/dump
#压缩文件存放目录
export TAR_DIR=/data/backup_oracle/ywdatabak

cd $DATA_DIR
echo "Starting bakup..."
echo "Bakup file path $DATA_DIR/db_expdp_$BAKUPTIME.dmp"

expdp sn_你要备份的数据库名称/sn_你要备份的数据库名称 directory=bak dumpfile=zy_sn_你要备份的数据库名称_$BAKUPTIME.dump logfile=zy_sn_你要备份的数据库名称_$BAKUPTIME.log
expdp sd_你要备份的数据库名称/sd_你要备份的数据库名称 directory=bak dumpfile=zy_sd_你要备份的数据库名称_$BAKUPTIME.dump logfile=zy_sd_你要备份的数据库名称_$BAKUPTIME.log
expdp ml_你要备份的数据库名称/ml_你要备份的数据库名称 directory=bak dumpfile=zy_ml_你要备份的数据库名称_$BAKUPTIME.dump logfile=zy_ml_你要备份的数据库名称_$BAKUPTIME.log
expdp gt_你要备份的数据库名称/gt_你要备份的数据库名称 directory=bak dumpfile=zy_gt_你要备份的数据库名称_$BAKUPTIME.dump logfile=zy_gt_你要备份的数据库名称_$BAKUPTIME.log
expdp lz_你要备份的数据库名称/lz_你要备份的数据库名称 directory=bak dumpfile=zy_lz_你要备份的数据库名称_$BAKUPTIME.dump logfile=zy_lz_你要备份的数据库名称_$BAKUPTIME.log
expdp zy_你要备份的数据库名称/zy_你要备份的数据库名称 directory=bak dumpfile=zy_zy_你要备份的数据库名称_$BAKUPTIME.dump logfile=zy_zy_你要备份的数据库名称_$BAKUPTIME.log
expdp gz_你要备份的数据库名称/gz_你要备份的数据库名称 directory=bak dumpfile=zy_gz_你要备份的数据库名称_$BAKUPTIME.dump logfile=zy_gz_你要备份的数据库名称_$BAKUPTIME.log
#expdp zn_你要备份的数据库名称/zn_你要备份的数据库名称 directory=bak dumpfile=zn_你要备份的数据库名称_$BAKUPTIME.dump logfile=zn_你要备份的数据库名称_$BAKUPTIME.log
#expdp zq_你要备份的数据库名称/zq_你要备份的数据库名称 directory=bak dumpfile=zq_你要备份的数据库名称_$BAKUPTIME.dump logfile=zq_你要备份的数据库名称_$BAKUPTIME.log
expdp gsst_uums/gsst_uums directory=bak dumpfile=zy_gsst_uums_$BAKUPTIME.dump logfile=zy_gsst_uums_$BAKUPTIME.log
expdp gsst_fms/gsst_fms directory=bak dumpfile=zy_gsst_fms_$BAKUPTIME.dump logfile=zy_gsst_fms_$BAKUPTIME.log
expdp gsst_wf/gsst_wf directory=bak dumpfile=zy_gsst_wf_$BAKUPTIME.dump logfile=zy_gsst_wf_$BAKUPTIME.log
#parallel=4 为并行度,有助于减少备份时间,但会增加CPU负载

echo "Starting tar..."
echo "Tar file path $TAR_DIR/SCOTT_$BAKUPTIME.tar.gz"
tar -zcvf $TAR_DIR/zy_sn_你要备份的数据库名称_$BAKUPTIME.tar.gz zy_sn_你要备份的数据库名称_$BAKUPTIME*
tar -zcvf $TAR_DIR/zy_zy_你要备份的数据库名称_$BAKUPTIME.tar.gz zy_zy_你要备份的数据库名称_$BAKUPTIME*
tar -zcvf $TAR_DIR/zy_sd_你要备份的数据库名称_$BAKUPTIME.tar.gz zy_sd_你要备份的数据库名称_$BAKUPTIME*
tar -zcvf $TAR_DIR/zy_ml_你要备份的数据库名称_$BAKUPTIME.tar.gz zy_ml_你要备份的数据库名称_$BAKUPTIME*
tar -zcvf $TAR_DIR/zy_gt_你要备份的数据库名称_$BAKUPTIME.tar.gz zy_gt_你要备份的数据库名称_$BAKUPTIME*
tar -zcvf $TAR_DIR/zy_lz_你要备份的数据库名称_$BAKUPTIME.tar.gz zy_lz_你要备份的数据库名称_$BAKUPTIME*
tar -zcvf $TAR_DIR/zy_gz_你要备份的数据库名称_$BAKUPTIME.tar.gz zy_gz_你要备份的数据库名称_$BAKUPTIME*
#tar -zcvf $TAR_DIR/gn_zq_你要备份的数据库名称_$BAKUPTIME.tar.gz zq_你要备份的数据库名称_$BAKUPTIME*
#tar -zcvf $TAR_DIR/gn_zn_你要备份的数据库名称_$BAKUPTIME.tar.gz zn_你要备份的数据库名称_$BAKUPTIME*
tar -zcvf $TAR_DIR/zy_gsst_uums_$BAKUPTIME.tar.gz zy_gsst_uums_$BAKUPTIME*
tar -zcvf $TAR_DIR/zy_gsst_fms_$BAKUPTIME.tar.gz zy_gsst_fms_$BAKUPTIME*
tar -zcvf $TAR_DIR/zy_gsst_wf_$BAKUPTIME.tar.gz zy_gsst_wf_$BAKUPTIME*

#SFTP配置信息
#用户名
USER=gssec_user_sftpadmin0y4
#密码
PASSWORD=Gssec_P@ssw0rd0y4
#待上传文件根目录
SRCDIR=/data/backup_oracle/ywdatabak
#SFTP目录
DESDIR=gssec_user_sftpadmin0y4/upload
#IP
IP=10.212.8.243
#端口
PORT=22

#获取文件
cd ${SRCDIR} ;
#目录下的文件
FILES=$(ls ${SRCDIR} | grep ${BAKUPTIME} | sed ':a;N;$!ba; s/\n/ /g')
for FILE in ${FILES}
do
echo ${FILE}
#发送文件 (关键部分)  复制出来,如有结尾有空格,请自行去掉
lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT} <<EOF
cd ${DESDIR}/
lcd ${SRCDIR}
put ${FILE}
by
EOF

done


echo "Bakup job is done!"
#历史文件保留7天
find  $DATA_DIR -type f -mtime +7 -exec rm -rf {} \;
find  $TAR_DIR -type f -mtime +7 -exec rm -rf {} \;

Copy

Mongo

备份Mongo

#!/bin/bash
export BAKUPTIME=`date +%Y%m%d%H%M%S`
export BAKUPDIR='/data/mongo_dmp'
export mongo_host='127.0.0.1'
export mongo_port='27017'
export db_name='gstj_internet'
export db_user='gstj_internet'
export db_pass='teekjhjOQTV9Oyhv'
mongodump -h ${mongo_host}:${mongo_port} -d ${db_name} -u ${db_user} -p ${db_pass} -o ${BAKUPDIR}/${db_user}/${BAKUPTIME}
cd ${BAKUPDIR}
tar -czvf ${BAKUPTIME}.tar.gz ${BAKUPTIME}
rm -rf ${BAKUPDIR}${BAKUPTIME}
# 删除过期数据
find  ${BAKUPDIR} -type f -mtime +60 -exec rm -rf {} \;

Copy

还原Mongo

#!/bin/bash
# 导入之前检查变量
mongo_home='/data/mongodb'
mongo_host='127.0.0.1'
mongo_port='27017'
import_db='iebdc'
import_user='iebdc'
import_passwd='aQuyZC8ty9tQnkME9'
json_dir='/root/mongodb-iebdc/mongodb/'
json_files=$(ls ${json_dir})
for i in $json_files;do
  ${mongo_home}/bin/mongoimport -h ${mongo_host}:${mongo_port} -d ${import_db} -u ${import_user} -p ${import_passwd} ${json_dir}/${i}
  #echo $i # 测试
done

Copy

MySQL

备份MySQL

/bin/bash


set -e


USER="backup"
PASSWORD="backup"
# 数据库数据目录 #
DATA_DIR="/data/mysql"
BIN_INDEX=$DATA_DIR"/mysql-bin.index"
# 备份目录 #
BACKUP_DIR="/data/backup/mysql"
BACKUP_LOG="/var/log/mysql/backup.log"


DATE=`date +"%Y%m%d"`
TIME=`date +"%Y%m%d%H"`


LOG_TIME=`date +"%Y-%m-%d %H:%M:%S"`
DELETE_BINLOG_TIME="7 day"
INCREMENT_INTERVAL="3 hour"


note() {
    printf "[$LOG_TIME] note: $*\n" >> $BACKUP_LOG;
}


warning() {
    printf "[$LOG_TIME] warning: $*\n" >> $BACKUP_LOG;
}


error() {
    printf "[$LOG_TIME] error: $*\n" >> $BACKUP_LOG;
    exit 1;
}


full_backup() {
    local dbs=`ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}'`


    for db in $dbs
    do
        local backup_dir=$BACKUP_DIR"/full/"$db
        local filename=$db"."$DATE
        local backup_file=$backup_dir"/"$filename".sql"


        if [ ! -d $backup_dir ]
        then
            mkdir -p $backup_dir || { error "创建数据库 $db 全量备份目录 $backup_dir 失败"; continue; }
            note "数据库 $db 全量备份目录 $backup_dir  不存在,创建完成";
        fi


        note "full backup $db start ..."
        mysqldump --user=${USER} --password=${PASSWORD} --flush-logs --skip-lock-tables --quick $db > $backup_file || { warning "数据库 $db 备份失败"; continue; }


        cd $backup_dir
        tar -cPzf $filename".tar.gz" $filename".sql"
        rm -f $backup_file
        chown -fR mysql:mysql $backup_dir


        note "数据库 $db 备份成功";
        note "full backup $db end."
    done
}


increment_backup() {
    local StartTime=`date "-d $INCREMENT_INTERVAL ago" +"%Y-%m-%d %H:%M:%S"`
    local DELETE_BINLOG_END_TIME=`date "-d $DELETE_BINLOG_TIME ago" +"%Y-%m-%d %H:%M:%S"`
    local dbs=`ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}'`


    mysql -u$USER -p$PASSWORD -e "purge master logs before '$DELETE_BINLOG_END_TIME'" && note "delete $DELETE_BINLOG_TIME days before log";


    filename=`cat $BIN_INDEX | awk -F "/" '{print $2}'`
    for i in $filename
    do
        for db in $dbs
        do
            local backup_dir=$BACKUP_DIR"/increment/"$db
            local filename=$db"."$TIME
            local backup_file=$backup_dir"/"$filename".sql"


            if [ ! -d $backup_dir ]
            then
                mkdir -p $backup_dir || { error "创建数据库 $db 增量备份目录 $backup_dir 失败"; continue; }
                note "数据库 $db 增量备份目录 $backup_dir  不存在,创建完成";
            fi


            note "increment backup $db form time $StartTime start ..."


            mysqlbinlog -d $db --start-datetime="$StartTime" $DATA_DIR/$i >> $backup_file || { warning "数据库 $db 备份失败"; continue; }


            note "increment backup $db end."
        done
    done


    for db in $dbs
    do
        local backup_dir=$BACKUP_DIR"/increment/"$db
        local filename=$db"."$TIME
        local backup_file=$backup_dir"/"$filename".sql"


        cd $backup_dir
        tar -cPzf $filename".tar.gz" $filename".sql"
        rm -f $backup_file


        note "数据库 $db 备份成功";
    done
}


case "$1" in
    full)
        full_backup
    ;;
    increment)
        increment_backup
    ;;
    *)
        exit 2
    ;;
esac


exit 1

Copy

目录备份

#!/bin/bash
#
#
# 时间
DATE=$(date '+%Y-%m-%d_%H_%M_%S')
# 备份目录
BACKUPDIR="/home/backups"
# 需要备份的目录
SORFILE=/opt
# 目标文件名
DESFILE=/home/backups/$SORFILE.$(date '+%Y-%m-%d_%H_%M_%S').zip


[ ! -d $BACKUPDIR ] && mkdir -p $BACKUPDIR
cd $BACKUPDIR


echo "start backup $SORFILE ..."
sleep 3
#echo "$DESFILE"




#tar cvf $DESFILE $SORFILE
#gzip -f .zip $DESFILE
zip -r $DESFILE $SORFILE &>/dev/null
if [ "$?" == "0" ]
then
   echo $(date +%Y-%m-%d)" zip sucess">>backup.log
else
   echo $(date +%Y-%m-%d)" zip failed">>backup.log
   exit 0
fi


# 删除3天前的备份
find $BACKUPDIR -type f -ctime +3 | xargs rm -rf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值