最近用WordPress建了个个人博客,本着数据无价的原则编写了本脚本对数据库和网址目录进行备份并上传到百度网盘里
话不多说,下面就该Python脚本的程序依赖、代码说明及使用方法进行叙述
一、程序依赖
1.安装Python Requests 库
pip install requests
2.安装bypy(这是一个pytnon的百度网盘客户端)pip install bypy
关于bypy的详细说明可以看(https://github.com/houtianze/bypy)
3.初始化bypy并授权
bypy info
会显示如下信息,访问红色框的网址就可以进行授权
![](https://img-blog.csdn.net/20170427230730142?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
登陆自己的百度账号得到授权码
![](https://img-blog.csdn.net/20170427231121587?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170427231254823?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
将该授权码复制到终端里,并回车就授权成功了
![](https://img-blog.csdn.net/20170427231535256?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
至此相关程序依赖搭建完毕
二、代码说明
该脚本的代码主要分为三块:数据库备份函数、网站目录备份函数和打包上传函数。下面进行说明
1.初始化函数
def init():
global BACKUP_PATH, WP_PATH, DB_HOST, DB_USER, DB_NAME
global DB_USER_PASSWORD, DATETIME, TODAYBACKUPPATH
# 需要修改部分
BACKUP_PATH = '/backup/' # 备份文件存放路径
WP_PATH = '/var/www/html/' # 网站根目录路径
BaiDu_Path = '/WPbackup/' # 云端备份目录
DB_HOST = 'localhost' # 数据库地址,默认本地
DB_USER = 'root' # 数据库用户
DB_USER_PASSWORD = 'zxc123...' # 数据库密码
DB_NAME = 'wordpress' # 备份数据库的表名
# 需要备份多个表,表名以列方式放在dbnames.txt内
# DB_NAME = BACKUP_PATH+'/dbnames.txt'
################################
# 得到当前时间像 "20170425221512"
DATETIME = time.strftime('%Y%m%d%H%M%S')
TODAYBACKUPPATH = BACKUP_PATH + DATETIME
# 创建备份目录
print "creating backup folder"
if not os.path.exists(TODAYBACKUPPATH):
os.makedirs(TODAYBACKUPPATH)
print "init finished"
最前面的两行global是对一些全局变量进行声明
用户需要根据自己需要修改备份文件存放路径、网站根目录路径、云端备份目录、数据库地址、数据库用户、数据库密码和备份数据库的表名等内容。如果有多个表需要备份,则可以在BACKUP_PATH路径下新建一个dbnames.txt文件并将表名按行存放
2.数据库备份函数
def DBbackup():
global BACKUP_PATH, WP_PATH, DB_HOST, DB_USER, DB_NAME
global DB_USER_PASSWORD, DATETIME, TODAYBACKUPPATH
# 判断备份方式
print "checking for databases names file."
if os.path.exists(DB_NAME):
file1 = open(DB_NAME)
multi = 1
print "Starting backup of all dbs listed in file " + DB_NAME
else:
print "Databases file not found..."
print "Starting backup of database " + DB_NAME
multi = 0
# 开始备份数据库
if multi: # 以 dbnames.txt 内容进行备份
in_file = open(DB_NAME, "r")
flength = len(in_file.readlines())
in_file.close()
p = 1
dbfile = open(DB_NAME, "r")
while p <= flength:
db = dbfile.readline() # reading database name from file
db = db[:-1] # deletes extra line
dumpcmd = "mysqldump -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + TODAYBACKUPPATH + "/" + db + ".sql"
os.system(dumpcmd)
p = p + 1
dbfile.close()
else:
db = DB_NAME
dumpcmd = "mysqldump -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + TODAYBACKUPPATH + "/" + db + ".sql"
os.system(dumpcmd)
print "Mysql Backup script completed"
最终的数据库备份文件*.sql会被放在一个以备份时间命名的文件夹内(如:/backup/20170425221512)
![](https://img-blog.csdn.net/20170427233349781?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.网站目录备份函数
我的网站根目录是/var/www/html/,我们将对该目录下的所有文件进行备份
def Webbackup():
global BACKUP_PATH, WP_PATH, DB_HOST, DB_USER, DB_NAME
global DB_USER_PASSWORD, DATETIME, TODAYBACKUPPATH
# 备份网站目录
print "Start Backup Web"
# 开始备份WordPress目录
dumpcmd = "cd " + TODAYBACKUPPATH
os.system(dumpcmd)
dumpcmd = "zip -r " + TODAYBACKUPPATH + "/Web.zip " + WP_PATH
os.system(dumpcmd)
最终会在备份文件里打包一个Web.zip的文件
![](https://img-blog.csdn.net/20170427233453156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4.打包上传函数
使用bypy的upload函数,他的具体使用方法可以查看我的博客
def upload2baiduyun():
global BACKUP_PATH, WP_PATH, DB_HOST, DB_USER
global DB_USER_PASSWORD, DATETIME, TODAYBACKUPPATH, BaiDu_Path
# 对备份文件进行打包
print "start zip"
dumpcmd = "zip -r " + BACKUP_PATH + DATETIME + ".zip " + TODAYBACKUPPATH
os.system(dumpcmd)
# 上传到百度云
print "start backup"
dumpcmd = "bypy -v upload " + BACKUP_PATH + DATETIME + ".zip" + " /WPbackup/"
os.system(dumpcmd)
print "backup over"
该函数主要有两个功能,一是把备份目录进行打包最终文件如下图,二是把打包文件上传到百度网盘
![](https://img-blog.csdn.net/20170427234123160?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
至此该脚本的全部代码说明完毕,下面是完整的代码,也可以去我的资源下载
#!/usr/bin/env python
# coding=utf-8
import os, time, datetime
import bypy
global BACKUP_PATH, WP_PATH, DB_HOST, DB_USER, DB_NAME
global DB_USER_PASSWORD, DATETIME, TODAYBACKUPPATH, BaiDu_Path
def init():
global BACKUP_PATH, WP_PATH, DB_HOST, DB_USER, DB_NAME
global DB_USER_PASSWORD, DATETIME, TODAYBACKUPPATH
# 需要修改部分
BACKUP_PATH = '/backup/' # 备份文件存放路径
WP_PATH = '/var/www/html/' # 网站根目录路径
BaiDu_Path = '/WPbackup/' # 云端备份目录
DB_HOST = 'localhost' # 数据库地址,默认本地
DB_USER = 'root' # 数据库用户
DB_USER_PASSWORD = 'zxc123...' # 数据库密码
DB_NAME = 'wordpress' # 备份数据库的表名
# 需要备份多个表,表名以列方式放在dbnames.txt内
# DB_NAME = BACKUP_PATH+'/dbnames.txt'
################################
# 得到当前时间像 "20170425221512"
DATETIME = time.strftime('%Y%m%d%H%M%S')
TODAYBACKUPPATH = BACKUP_PATH + DATETIME
# 创建备份目录
print "creating backup folder"
if not os.path.exists(TODAYBACKUPPATH):
os.makedirs(TODAYBACKUPPATH)
print "init finished"
def DBbackup():
global BACKUP_PATH, WP_PATH, DB_HOST, DB_USER, DB_NAME
global DB_USER_PASSWORD, DATETIME, TODAYBACKUPPATH
# 判断备份方式
print "checking for databases names file."
if os.path.exists(DB_NAME):
file1 = open(DB_NAME)
multi = 1
print "Starting backup of all dbs listed in file " + DB_NAME
else:
print "Databases file not found..."
print "Starting backup of database " + DB_NAME
multi = 0
# 开始备份数据库
if multi: # 以 dbnames.txt 内容进行备份
in_file = open(DB_NAME, "r")
flength = len(in_file.readlines())
in_file.close()
p = 1
dbfile = open(DB_NAME, "r")
while p <= flength:
db = dbfile.readline() # reading database name from file
db = db[:-1] # deletes extra line
dumpcmd = "mysqldump -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + TODAYBACKUPPATH + "/" + db + ".sql"
os.system(dumpcmd)
p = p + 1
dbfile.close()
else:
db = DB_NAME
dumpcmd = "mysqldump -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + TODAYBACKUPPATH + "/" + db + ".sql"
os.system(dumpcmd)
print "Mysql Backup script completed"
def Webbackup():
global BACKUP_PATH, WP_PATH, DB_HOST, DB_USER, DB_NAME
global DB_USER_PASSWORD, DATETIME, TODAYBACKUPPATH
# 备份网站目录
print "Start Backup Web"
# 开始备份WordPress目录
dumpcmd = "cd " + TODAYBACKUPPATH
os.system(dumpcmd)
dumpcmd = "zip -r " + TODAYBACKUPPATH + "/Web.zip " + WP_PATH
os.system(dumpcmd)
def upload2baiduyun():
global BACKUP_PATH, WP_PATH, DB_HOST, DB_USER
global DB_USER_PASSWORD, DATETIME, TODAYBACKUPPATH, BaiDu_Path
# 对备份文件进行打包
print "start zip"
dumpcmd = "zip -r " + BACKUP_PATH + DATETIME + ".zip " + TODAYBACKUPPATH
os.system(dumpcmd)
# 上传到百度云
print "start backup"
dumpcmd = "bypy -v upload " + BACKUP_PATH + DATETIME + ".zip" + " /WPbackup/"
os.system(dumpcmd)
print "backup over"
if __name__ == '__main__':
init()
DBbackup()
Webbackup()
upload2baiduyun()
三、使用方法
在终端运行如下命令,即可python /backup/WPbackup.py
如果想服务器自动备份,则可以把该命令加入到定时程序里面,操作如下:crontab -e
![](https://img-blog.csdn.net/20170427235623275?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
输入
30 3 * * * python /backup/WPbackup.py
按Esc输入:wq再回车就保存退出了
![](https://img-blog.csdn.net/20170427235658823?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
输入,则可以查看当前定时任务
crontab -l
![](https://img-blog.csdn.net/20170427235859997?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
四、效果展示
到目前为止,该脚本从程序依赖到使用方法已经弄完了,下面进行一下效果展示
1.本地备份目录
![](https://img-blog.csdn.net/20170428000904142?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.云端效果
![](https://img-blog.csdn.net/20170428000946377?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.代码运行效果
最终终端效果
![](https://img-blog.csdn.net/20170428002543800?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxpdmVxZg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
动图(好吧,图片太大了传不上来)
欢迎访问我的个人博客
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)