利用阿里云OSS云存储实现MySQL数据库远程备份的图文教程

李洋博客 03-13 771阅读 0评论

温馨提示:这篇文章已超过44天没有更新,请注意相关的内容是否还可用!

hello我又双叒叕来了,昨天用了一天时间写个本地定时任务备份数据库文件的文章,今天想了想还得努努力来个远程备份,毕竟如果服务器被入侵或者其他问题导致文件和数据库损坏,那么及时有本地备份也意义不大啊,还得弄个远程备份才靠谱写,于是乎一天就开始了新一轮折腾,其他还好吧,毕竟主要的代码昨天都写完了,今天就是安装阿里云OSS在补全一些远程备份的命令就好了,一看到还得敲命令就觉得好难啊,其实一点也不简单,,,不好,别废话了,开始折腾:

安装阿里云OSS

安装官方文档,下载和安装程序,命令如下:

sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash

安装过程中,需要使用解压工具(unzip、7z)解压软件包,请提前安装其中的一个解压工具。安装完成后,ossutil会安装到/usr/bin/目录下。

配置ossutil

输入配置命令:

ossutil config

根据提示设置配置文件路径,文件名可以带路径(默认为:/root/.ossutilconfig,回车将使用默认路径,建议回车默认!!!

然后设置语言,请输入语言CH或EN(注意大写字母),工具使用的语言默认与操作系统保持一致,该配置项将在此次config命令设置成功后生效。

利用阿里云OSS云存储实现MySQL数据库远程备份的图文教程 第1张

确保语言后,输入最最重要的AccessKey 信息,最后一个stsToken没有可以不填写,自己登录阿里云账号,右上角头像获取相关信息,如图:

利用阿里云OSS云存储实现MySQL数据库远程备份的图文教程 第2张

根据提示分别设置,直接复制爱粘贴就行,需要后续需要修改配置文件可以在【/root/.ossutilconfig】中修改:

[Credentials]
language=CH
accessKeyID=******wwwliblogcn******
endpoint=https://oss-cn-beijing.aliyuncs.com
accessKeySecret=********wwwliblogcn*****

这里特别说明下【endpoint】要设置区域的,第一次安装配置后就出错了,无论怎么上传一直提示错误,原因就是这个设置错了,大概就酱婶儿的:

Error: oss: service returned error: StatusCode=400, ErrorCode=InvalidBucketName, ErrorMessage="The specified bucket is not valid.", RequestId=65F1345AF15BB23733AEA62D, Ec=0015-00000001

附上阿里云公共云下OSS Region和Endpoint对照表:点我链接直达,找到之后要添加【http://】或者【https://】。

到此安装阿里云OSS基本完成了,最后来验证是否已成功安装ossutil,运行命令:

ossutil

如果屏幕中输出ossutil所有支持的命令,表明已成功安装ossutil,如图,文件很多,只截取上面一部分:

利用阿里云OSS云存储实现MySQL数据库远程备份的图文教程 第3张

看到这么内容证明安装已经完成,功能已经集成完毕,接下来我们修改下脚本文件,找到昨天设置好的【backup.sh】文件,如果不知道昨天写的什么,自己查看“记录Linux定时备份Mysql数据库文件,详细的图文教程,限小白大佬绕行”,懒得看就自己新建一个脚本文件,相关代码如下:

#!/bin/bash

# 备份的数据库名
DB_NAME="zbp_1012"

# 设置备份路径  
BACKUP_PATH="/www/b"

OSS_BUCKET="OSSbucket名称"
OSS_PREFIX="OSS存储目录"

# 生成备份文件名
BACKUP_FILE="backup_$(date +%Y%m%d_%H%M%S).sql"

# 使用mysqldump备份数据库  
/usr/bin/mysqldump $DB_NAME > $BACKUP_PATH/$BACKUP_FILE

# 上传备份文件到OSS
/usr/bin/ossutil64 cp $BACKUP_PATH/$BACKUP_FILE oss://$OSS_BUCKET/$OSS_PREFIX/$BACKUP_FILE

# 删除旧的备份文件(保留最近3天的备份)
find $BACKUP_PATH -type f -mtime +3 -name "backup_*.sql" -exec rm {} \;

# 删除旧的远程备份文件(保留最近3天的备份)
find_and_delete_old_backups() {
  local backup_path="$1"
  local current_date=$(date +%s)

  ossutil ls "$backup_path" | awk 'NR > 1 {print $2}' | while read -r line; do
    local file_date=$(echo "$line" | sed 's/.*backup_\([0-9]*\)_.*/\1/')
    local file_age=$((current_date - file_date))

    if [ $file_age -gt 259200 ]; then
      ossutil rm "$line"
    fi
  done
}

find_and_delete_old_backups "$BACKUP_PATH"

比昨天的本地备份多了几段远程上传和删除的命令,备份路径换成自己实际需要的路径,其中【/usr/bin/ossutil64】路径可以使用

which ossutil

来查询,确定返回的路径换成自己的就行,一般默认好像都一样。都修改完成后,保存文件,运行以下命令:

sed -i 's/\r$//' /www/b/backup.sh

命令会使用 sed 工具将脚本文件中的 DOS 格式换行符(\r)替换为空,从而将其转换为 Unix 格式。命令运行后不会提示,接着运行下脚本,命令代码:

bash /www/b/backup.sh

把上面的两个路径都换成自己的实际的路径,然后看图:

利用阿里云OSS云存储实现MySQL数据库远程备份的图文教程 第4张

效果如图那就是正常了,已经完成可本地备份和OSS远程备份,可以随时看见进度,上传速度不是很快,但是够用了,好了,到目前位置Linux的定时备份功能和远程oss备份功能已经全部完成,可能有些人使用腾讯云或者其他云服务,代码基本一样,就是安装云存储可能有些差异,自行研究,哦对了,可能还有人有疑问,至少最开始我也有这个疑问那就是,我明明设置了只保存3份,为什么云存储和本地有好多份文件呢?原因是我们是预留天数。打个比方我们带代码里设置的是3天,那么我们今天手动测试备份了N个,那么定时任务还是去如期备份,但是这些都属于当天的,并没有超过3天,所以可能会存在多个,等逾期之后应该就是正常了,先静观其变吧,有问题再议,告辞~~~

文章版权声明:除非注明,否则均为老李笔记原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,771人围观)

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码