我的网站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代码如下
假如说我想每分钟都运行一次,可以按照下面这样实现。
下一节将会介绍如何上传到百度云及邮件通知。
领取专属 10元无门槛券
私享最新 技术干货