在centos(linux)中通过bash shell和python实现网站和数据库的自动备份,并自动上传至OSS

一、前言

我等懒人实在是不喜欢每天备份数据库和网站, 于是就研究了一下在linux环境下的网站与数据库的自动备份.

服务器环境:阿里云ECS CentOS7.6 + MySQL5.6

需要用到:bash shell,python(CentOS里自带的2.7.5即可)

使用的软件:phpstorm,xshell,notepad++,flashfxp,我是在windows环境下编写脚本的

二、基本思路

1、编写shell脚本,备份数据库到指定目录下

2、编写Python脚本,把文件上传到OSS

3、把shell脚本和Python脚本添加Linux的crontab定时器,设置定时执行

三、具体流程

1. 编写bash shell脚本

      本文中的bash脚本文件放置在: /opt/backup.sh

#!/bin/sh

echo "+==========================================================+"
echo "+=  1. The Backup process is begining!"

# public settings
Now=$(date +"%Y-%m-%d")
backUpPath="/opt/backUpPath/laoliupro"
webSiteBackUpFilePrefix=website
mysqlBackUpFilePrefix=mysql

# website settings
webSitePath="/data/www/laoliu.pro"
webSiteBackUpFileName=$webSiteBackUpFilePrefix$Now.tar.gz

# mysql settings
mysqlUser="username"
mysqlPassword="password"
mysqlDataBaseName="database"
mysqlBackUpFileName=$mysqlBackUpFilePrefix$Now.sql

# set and into backup path
if [ ! -d "$backUpPath"  ]
then
  mkdir "$backUpPath"
fi
cd $backUpPath
echo "+=  2. You are in "$backUpPath""

# backup mysql database
mysqldump -u"$mysqlUser" -p"$mysqlPassword" "$mysqlDataBaseName" > $mysqlBackUpFileName
echo "+=  3. Mysql Database backup successfully completed"

# backup website
tar -czPf $webSiteBackUpFileName "$webSitePath"
echo "+=  4. WebSite Program backup successfully completed"

# delete yesterday database files
SevenDays=$(date -d -1day +"%Y-%m-%d")
if [ -f "$backUpPath"/$mysqlBackUpFilePrefix$SevenDays.sql  ]
then
 rm -rf "$backUpPath"/$mysqlBackUpFilePrefix$SevenDays.sql
 echo "+=  5. You have delete 1 days ago database file"
else
 echo "+=  5. 1 days ago database file not exist, no need to delete"
fi

# delete yesterday website files
if [ -f "$backUpPath"/$webSiteBackUpFilePrefix$SevenDays.tar.gz  ]
then
 rm -rf "$backUpPath"/$webSiteBackUpFilePrefix$SevenDays.tar.gz
 echo "+=  6. You have delete 1 days ago website file"
else
 echo "+=  6. 1 days ago website file not exist, no need to delete"
fi

echo "+=  7. The Backup process has been executed!"
echo "+==========================================================+"
echo "+=  Welcome to laoliu's website, http://laoliu.pro        =+"
echo "+==========================================================+"

说明:

1. 你只需在脚本里将几个settings的值改成你环境中的值即可使用.

2. bash shell的脚本我是在phpstorm中编写的.如果你也是一个PHPer, 那就可以在phpstorm中安装bash support这个插件来编写.

 2. 给脚本增加权限, 并测试是否可正常执行

cd /opt/

# 给权限
chmod +x ./backup.sh

# 执行
./backup.sh

说明:

1. 如果你是在VIM中直接编写的脚本,那是可以直接执行, 并在/opt/backUpPath/这个目录下看到具体的备份文件.

2. 如果你是在windows环境编写后通过ftp上传的, 那就会出现字符编码的问题, 可以参照这位网友的文章进行修改:https://blog.csdn.net/qq_31331027/article/details/84590300. 简单的说, 就是进入VIM, 设置:set ff=unix 后保存即可.

3. 编写python脚本,来实现自动上传至OSS

    编写python脚本前, 请先检查下CentOS里是否已经安装python环境. CentOS默认是安装python的,我们可以先检查下:

# 查看Python版本(V是大写的)

python -V

确认了已经安装python环境后, 我们就可以编写python脚本了:

本文中的python脚本文件放置在: /opt/backupToOSS.py

# -I- coding: utf-8 -*-
import os
import oss2

# path是之前备份设置的目录
path = '/opt/backUpPath/laoliupro/'

# Endpoint是类似'http://oss-cn-hongkong.aliyuncs.com'格式的,不带Bucket名称
auth = oss2.Auth('您的AccessKeyId','您的AccessKeySecret')
bucket = oss2.Bucket(auth,'您的Endpoint','您的Bucket名称')

#获取目录下的所有文件
f_list = os.listdir(path)
for i in f_list:
    # put_object()方法第一个参数是要存到OSS的文件名, 第二个参数是具体的路径和文件名
    result = bucket.put_object_from_file(i, path + i)

 

说明:

1. 刚运行脚本的时候, 可能会提示找不到oss2, 只需通过pip安装一下即可

pip install oss2

2. 再次运行脚本的时候, 可能会出现如下提示:

/usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.25.3) or chardet (2.2.1) doesn't match a supported version!  RequestsDependencyWarning

其实对代码的执行没有任何影响, 可以选择无视。有懂解决方案的朋友欢迎在评论中给出解决方案

3. python脚本执行上传至OSS时, 如果出现'Code': 'InvalidBucketName'的提示. 需要注意Endpoint和bucket的值是否填写正确.

4. 阿里云OSS的文档: https://aliyun-oss-python-sdk.readthedocs.io/en/stable/index.html

四、设置计划任务

1. 服务器默认环境下通常都会安装crontab,如果你的CentOS中没有安装,可以通过如下命令进行安装:

yum install cron -y

2. 查看已有的计划任务

crontab -l

3. 将新写的两个脚本添加到计划任务

# 每天凌晨1点执行自动备份
0 1 * * * /opt/backup.sh

# 每天凌晨3点将自动备份上传至OSS
0 3 * * * python /opt/backupToOSS.py

计划任务简单说明:

五、好了,休息去了

1. 呃,已经懒到骨子里了。如果电脑能代替我写代码多好,那我就不用996,可以多玩会塞尔达了(尽管我的NS已经被我爸抢走了)

2. 接下来我还会再写一篇windows环境下自动备份到本机和自动备份到网盘或OSS的教程, 希望大家赏光观看。

3. 感谢https://www.linuxidc.com/Linux/2018-05/152336.htm这篇文章,来源于Linux社区,作者是guodong-wei。

    我再研究自动备份和自动上传OSS的时候, 受到这篇文章的很多启发, 十分感谢!

4. 最后放上我的二维码, 欢迎大家扫码加个好友

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值