[Shell 脚本] 备份数据库文件至OSS服务(纯shell脚本无sdk)

背景:

凡事使用服务器搭建的网站就需要定时备份网站数据,常见的方法是打包网站目录,然后备份到FTP服务器上等。也有通过OSS SDK把备份的网站文件上传到OSS服务器上,但是通过SDK来实现,需要一定的技术能力,而且相对比较复杂,需要使用更多的文件,而这篇文章是通过shell脚本,并不是通过OSS SDK来上传文件,简单方便。

步骤:

1、首先需要在阿里云注册账号,开通OSS服务,创建bucket,Bucket设置为私有读写。

2、将下面的脚本文件复制下来,保存为 .sh 脚本文件(例如:backupsqls,放置在/usr/local/sbin/backupsites),其中需要把oss地址、bucket名字、Access ID、Access Key、网站目录,已经通知邮件的地址修改成自己的。

3、使用命令: chmod +x /usr/local/sbin/backupsqls 对文件设置执行权限。

4、使用命令: echo “0 0 * /usr/local/sbin/backupsqls” >>/var/spool/cron/root

设置每天零点进行备份网站数据。

脚本:

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

Date=date +%Y-%m-%d_%H:%M:%S
BucketTime=date +%Y%m
OldDate=$(date -d "-7 days" "+%Y-%m-%d")

Host="oss-cn-hangzhou-internal.aliyuncs.com"
###oss的地址###
Bucket="bucketname"
###bucket名字###
Id="xxxxxxxx"
###Access ID###
Key="xxxxxxxxxx"
###Access Key###
OssHost=$Bucket.$Host

MYUSER="xxxxx"
MYPASS="xxxxxx"
###备份数据库账号信息###
DBS=mysql -u$MYUSER -p$MYPASS -P3306 -Bse "show databases" | grep -v "information_schema" | grep -v "test"
###罗列数据库信息###
#========================BackUp SQL========================

for DateName in $DBS; do
mysqldump --single-transaction -u$MYUSER -p$MYPASS -P3306 $DateName > /tmp/$DateName.$Date.sql
zip -P 密码 /tmp/$DateName.$Date.sql.zip /tmp/$DateName.$Date.sql
###zip压缩设置的密码###
if [ -s /tmp/$DateName.$Date.sql.zip ] ; then

    source="/tmp/$DateName.$Date.sql.zip"
    dest="$BucketTime/$DateName.$Date.sql.zip"

    resource="/${Bucket}/${dest}"
    contentType=`file -ib ${source} |awk -F ";" ‘{print $1}‘`
    dateValue="`TZ=GMT env LANG=en_US.UTF-8 date +‘%a, %d %b %Y %H:%M:%S GMT‘`"
    stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
    signature=`echo -en $stringToSign | openssl sha1 -hmac ${Key} -binary | base64`

    url=http://${OssHost}/${dest}
    echo "upload ${source} to ${url}"

    curl -i -q -X PUT -T "${source}"         -H "Host: ${OssHost}"         -H "Date: ${dateValue}"         -H "Content-Type: ${contentType}"         -H "Authorization: OSS ${Id}:${signature}"         ${url}

    if [ $? -ne 0 ];then
        echo -e ""[$HOSTNAME] DateName $DateName $Date Fail Upload"" | mutt -s "‘[$HOSTNAME] DateName $DateName $Date Fail Upload‘" [email protected]
    else
        echo -e ""[$HOSTNAME] DateName $DateName $Date Success"" | mutt -s "‘[$HOSTNAME] DateName $DateName $Date Success‘" [email protected]
        rm -rf /tmp/$DateName.$OldDate*
    fi

else
    echo -e ""[$HOSTNAME] DateName $DateName $Date Fail Backup "" | mutt -s "‘[$HOSTNAME] DateName $DateName $Date Fail Backup‘" [email protected]
fi

done

#========================BackUp SQL========================

执行效果可以查看:

http://blog.daobidao.com/shell-backup-sqls-to-oss.html

原文地址:https://blog.51cto.com/daobidao/2380859

时间: 2024-11-05 19:49:03

[Shell 脚本] 备份数据库文件至OSS服务(纯shell脚本无sdk)的相关文章

Shell脚本备份数据库(多库)

#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbinexport PATH#数据库用户名dbuser='root'#数据库用密码dbpasswd='password'#需要备份的数据库,多个数据库用空格分开dbname=('dbname1' 'dbname2 'dbname3' 'dbname4' 'dbname5')#备份时间backtime=`date +%Y%m%d%H%M%S`#mysql

shell脚本备份当前日期文件

#!/bin/bash #一月前 historyTime=$(date "+%Y-%m-%d %H" -d '1 month ago') echo ${historyTime} historyTimeStamp=$(date -d "$historyTime" +%s) echo ${historyTimeStamp} #一周前 $(date "+%Y-%m-%d %H" -d '7 day ago') #本月一月一日 date_this_mon

shell脚本备份日志文件

版本1 #!/bin/sh today=log_"$(date +%Y%m%d)" mkdir -p ./${today} cp -f /data/app/autoprice7/resin-pro-3.1.15/log/* ./${today}/ touch /data/app/autoprice7/resin-pro-3.1.15/log/start.info > /data/app/autoprice7/resin-pro-3.1.15/log/start.info touc

shell脚本+mysql数据库组合进行数据安全监控

shell脚本 + mysql数据库 实现企业级会话边界控制器文件解析并告警 dirsx30001.sh处理文件,生成mysql备份文件的方式进行导入 #/bin/bash ##环境变量 path=/home/sbclog/sx30001 ##由于抓取的日志文件中没有年份参数,故导入系统年份参数,以达到数据库时间字段datetime ##也可以抓取tar包的名字中的字段 date_year=`date|cut -c 25-` #test ! -e $path/*.tar &&echo &q

Saiku数据库迁移后的刷新脚本-Shell脚本读取数据库中的数据(二十三)

Saiku数据库迁移后的刷新脚本 之前有谈过对saiku中的数据进行刷新,因为saiku默认会从缓存中查询数据,但是配置不使用缓存又会效率低下... 所以这里就需要做一个数据刷新,每次ETL之后都需要执行一遍数据刷新脚本. 刷新脚本主要分为两部分 1.使用shell命令从数据库中读取已有的用户信息 (因为已经做过数据迁移,数据库已经从h2转为我们自己的mysql) saikuRefresh.sh #!/bin/bash #数据库连接信息 HOSTNAME="10.11.22.33" #

linux下shell脚本执行jar文件

最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚本 上面是小弟写的shell脚本.写的不好请见谅. 首先遇到的第一个坑 我在window下写的 然后道linux中执行,在linux死活都说俺的19行有错误,俺就不明白了,哪里有错,问了下别人,也说没错.突然有个高人问我在哪编写的,小弟回答在win下,他告诉俺执行下这个命令: dos2unix se

Mac下通过shell脚本修改properties文件

通过shell脚本替换属性文件中的某行记录 假设有如下属性文件 demo.properties user.name=test user.password=123456 ............................... 需求:先需要通过shell 脚本将 user.name 和 user.password 的value值替换为实际需要的用户名和密码, 将可以通过如下方式实现: sed -i "s#^user.name=.*#user.name=用户名#g"  path/de

shell脚本操作数据库

#!/bin/bash HOST_NAME="localhost" PORT=3306 USERNAME="root" PASSWORD="root" DBNAME="test" TABLENAME="tb_test" today=`date +%Y-%m-%d` #删除数据 delete_sql="delete from ${TABLENAME} where todaytime!= '${tod

让你提前认识软件开发(22):shell脚本中的文件操作

第1部分 重新认识C语言 shell脚本中的文件操作 [文章摘要] 编写shell脚本时,经常会涉及到对文件的操作,比如从文件中读取一行数据.向文件追加一行数据等.完成文件读写操作的方法有很多,了解各种命令下文件操作的执行情况,有助于开发人员在不同使用场景下选择合适的命令. 本文以实际的shell脚本为例,介绍了对文件进行操作的不同方法,为相关开发工作提供了参考. [关键词] shell  文件操作  读写  效率 一.概述 在某些软件项目的需求文档中,要求程序一次性读或写的数据规模较大,可达1