一、前言
我等懒人实在是不喜欢每天备份数据库和网站, 于是就研究了一下在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.youkuaiyun.com/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. 最后放上我的二维码, 欢迎大家扫码加个好友