首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

博客系统备份

我的网站codingsoho运行了一段时间,数据库也日渐庞大,感觉数据库的备份变得刻不容缓了。周末整理了一下,实现了基本的备份功能。包括数据库及媒体文件的本地以及云备份,同时实时邮件通知备份进展。

工具备份MySQL文件 - Navicat

如果你不打算用代码来实现,Navicat可以帮忙你实现基本的数据库备份功能。刚好我也是用Navicat管理MySQL的数据库的,所以顺便学习了一下。

假定你已经创建了自己的连接。打开连接属性,在[高级]标签里设置"设置保存路径",这样你的备份文件将会存在此路经。

设置完成之后,打开[计划]功能,点击下方[新建批处理作业]

会出现下方的批处理窗口,在左边选择对应的数据库,它就会出现在右边的[可用任务]里,点击它,将将会被选中出现在下面的[已选择任务]列表里。

点击做上方的[保存按钮],保存该任务,在弹出的下方对话框填入文件名确定即可。

这时可以看到,刚刚创建的backup任务已出现在计划列表里。

确定之后,它会再让你输入密码确认。

设置完成之后,它机会自动的去备份你的数据库了。看了一下它备份的格式,可以通过Navicat转为sql文件。

python脚本备份

上面只是简单介绍一下工具,下面开始我们的主题:如何用python来实现。

1

备份MySQL

MySQL备份的命令是

常用的格式为

mysqldump -u[username] -p[password] [dbname] > [save-path]

所以,我们备份的核心功能其实就是调用这句命令

在上面的语句中,用户名和密码我们存在配置文件里,db_name是数据库名字,因为我不仅要备份一个数据库,所以这个会是一个动态的结果,最终我们要设置好备份位置

配置文件为conf.py,内容如下

完整代码如下

dbs定义如下

其中,调用了一个命令,用于写日志,就是常见的写文件操作,追加方式,代码如下

提供根据时间设置一些文件名和log的方法,这样我们能够保证创建的文件或内容可溯性强,同时不会重复,实现如下

2

备份媒体文件

备份媒体文件用到了window的命令,实现方法类似,代码如下

medias的定义如下,里面放的是应用的media文件

它同样轮询媒体库,然后将目录下的文件拷到指定目录,并按合适规则命名

3

媒体文件压缩

媒体文件往往很大,如果直接拷贝对磁盘要求太高,所以我们接下来对它压缩一下。

高效的方法应该是读原文件直接压缩,我这儿本来是分两步介绍的,所以先拷贝,再压缩,最后再删除文件夹。实际使用时可以进行优化。

关于压缩技术已在

Django压缩包下载一文

做过介绍,这儿就不再详述了。

提醒一下的是,对于命令,第二个参数最好指定,否则它会根据源文件路径压缩,层级太多。

有的windows电脑上命令不支持,我们可以用下面命令代替

例如:

del /s /q *.svn

rmdir /s /q *.svn

disables Yes/No prompting

means delete the file(s) from all subdirectories.

4

定时调度

到这儿,我们的基本功能就实现了。但是我们希望它是周期性调度的,而不是只执行一次。

接下来我们用python的功能来实现。

首先如果没安装先安装一下

pip install schedule

使用非常简单,它的demo代码如下

假如说我想每分钟都运行一次,可以按照下面这样实现。

下一节将会介绍如何上传到百度云及邮件通知。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190113G0XWYT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券