用Python写个网站自动备份脚本
前几天看到有站长说自己博客莫名其妙的空了,所以不能让我的博客也这样啊,虽然才几十篇文章,但是也都是我这两年来积累的经验,所以就又拿出了我边学边用的Python写了个简单的自动备份脚步,也同时记录加分享;
由于懒癌,此脚本写差不多十天;
工作原理:
导出数据库后将网站目录和数据库打包并压缩为 xxx.tar.gz 文件,最后通过邮件发送备份包到指定邮箱;
开始
首先需要安装一些Python模块
开发版python是必须的
apt-get install python-dev # Debian系
yum install python-devel # RedHat系
MySQL-python
到 这里 下载适合自己系统的版本,Windows系统的直接双击 exe 安装,Linux解压并进入下载的 MySQL-python 然后输入下面命令安装
python setup.py install
如果提示:
EnvironmentError: mysql_config not found
输入下面命令安装 mysql_config
apt-get install libmysqlclient-dev # Debian系
yum install libmysqlclient-devel # RedHat系
然后重新安装 MySQL-python
python setup.py install
ConfigParser模块
到 这里 下载ConfigParser,解压并进入目录,然后输入下面命令安装
python setup.py install
脚本
此脚本我也放到 我的Github 了 ,此脚本适用Linux和Windows系统;
程序:site-backup.py
# -*- coding: utf-8 -*-
from email import encoders
from email.header import Header
from email.utils import parseaddr, formataddr
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from time import strftime,gmtime
import smtplib, MySQLdb, time, os, tarfile, ConfigParser
config=ConfigParser.ConfigParser()
config.read("site-backup.cfg")
# 获取时间
serverTime = str(time.strftime("%Y-%m-%d"))
backTime = float(config.get("time", "backTime"))
# 邮件变量
from_addr = config.get("mail", "from_addr")
password = config.get("mail", "password")
smtp_server = config.get("mail", "smtp_server")
to_addr = config.get("mail", "to_addr")
mail_sender = config.get("mail", "mail_sender")
mail_recipient = config.get("mail", "mail_recipient")
mail_title = config.get("mail", "mail_title")
# Mysql变量
mysql_host = config.get("mysql", "mysql_host")
mysql_user = config.get("mysql", "mysql_user")
mysql_password = config.get("mysql", "mysql_password")
mysql_database = config.get("mysql", "mysql_database")
# 网站文件变量
siteName = config.get("flies", "siteName")
dirName = siteName + "-" + serverTime
dirPath = config.get("flies", "dirPath")
siteBack_name = 'dirName.tar.gz'
# SQL和压缩包变量
backMysql_name = siteName + "-" + serverTime + '.sql'
sendSitePack = dirName + ".tar.gz"
# 导出数据库函数
def outMysql():
mysql_cmd = "mysqldump -u " + mysql_user + " -p" + mysql_password + " " + mysql_database + " > " + dirPath + backMysql_name
os.system(mysql_cmd)
# 打包网站文件函数
def siteFile():
t = tarfile.open(dirName + ".tar.gz", "w:gz")
for root, dir, files in os.walk(dirPath):
for file in files:
fullpath = os.path.join(root, file)
t.add(fullpath)
t.close()
# 发送邮件(备份包)函数
def sendMail():
message = MIMEMultipart()
message.attach(MIMEText('备份于' + serverTime, 'plain', 'utf-8'))
att = MIMEText(open(sendSitePack, 'rb').read(), 'base64', 'gb2312')
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = "attachment; filename=" + sendSitePack
message.attach(att)
message['From'] = mail_sender
message['To'] = mail_recipient
message['Subject'] = mail_title + serverTime
server = smtplib.SMTP_SSL(smtp_server, 465)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], message.as_string())
server.quit()
# 整个任务函数
def backSite():
outMysql()
if os.path.exists(dirPath + backMysql_name):
siteFile()
if os.path.exists(sendSitePack):
sendMail()
os.remove(dirPath + backMysql_name)
os.remove(sendSitePack)
# 循环执行备份任务
while True:
backSite()
time.sleep(backTime)
配置文件:site-backup.cfg
[mail]
# 发件人邮箱
from_addr = xxx@qq.com
# 发件人邮箱密码或者授权码
password = xxxxxxxxxxxxx
# smtp服务器
smtp_server = smtp.qq.com
# 收件人邮箱
to_addr = xxx@qq.com
# 发件人
mail_sender =
# 收件人
mail_recipient =
# 邮件标题
mail_title =
[flies]
# 网站名
siteName =
# 需要备份的网站目录路径,结尾必须加上\(WINDOWS)或/(Linux),例如下面
dirPath = /home/web/sitefile/
[mysql]
# Mysql服务器
mysql_host = loaclhost
# Mysql用户名
mysql_user =
# Mysql密码
mysql_password =
# 需要备份Mysql数据库
mysql_database =
[time]
# 备份时间间隔,单位为秒,建议12小时,即43200秒
backTime = 43200
让脚本工作起来
你也可以直接运行脚本,但是我建议将此脚本加入后台运行和开机自动运行;
后台运行
这里只有Linux的方法:使用 nohup ,关于 nohup 自己Google吧
nohup python site-backup.py > /dev/null &
然后敲一下回车键就不用管了,如果要结束这个任务的话查下进程
ps aux|grep python
找出进程后杀掉就行了
kill 进程号
如果有什么疑问和建议记得在下方评论留言哦;