- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python脚本实现自动将数据库备份到 Dropbox由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近,正好发生了一件大事,就是 GitLab 的运维同学不小心删除了生产的数据,虽然 GitLab 已经骇人听闻的准备了五种备份机制,但是,仍然导致他们丢失了将近 6 个小时的用户数据,尤其对他们声誉的损失,是根本无法估量的。反思一下,这个博客 Becomin' Charles,也是没有完善的备份的,真是冷汗直冒啊,主要考虑到这是我的个人博客,但是想想已经坚持了快十年了,如果真的丢了的话,还是非常痛心的.
正好,老婆最近正在学习Python 编程,我在教她,其实,我是PHP 程序员,一点也不喜欢 Python,但是说实在,一个外行学编程的话,Python 确实比PHP 友好太多了,只能推荐她学 Python 了。正好,借着这个机会,我决定自己也学学 Python 编程吧,于是,我决定要用 Python 做一个数据库的自动备份脚本。备份的位置,就用Dropbox 来做吧,因为我的服务器是 Linode 提供的,美国 fremont 机房,选择美国的存储服务,比较合适。以下是我写得代码,Python 小白,敬请指教:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#!/usr/bin/python
#coding:utf-8
import
sys
import
os
from
yamlimport load
from
datetime
import
datetime
import
dropbox
from
dropbox.filesimport WriteMode
from
dropbox.exceptions
import
ApiError, AuthError
if
len
(sys.argv) <
2
:
print
>>sys.stderr,
"Usage: %s <config_file>"
%
sys.argv[
0
]
sys.exit(
0
)
conf
=
load(
file
(sys.argv[
1
],
'r'
))
# config file is a YAML looks like
# ---
# server-name: 127.0.0.1
# local-backup-path: /tmp
# remote-backup-path: /backup
# dropbox-token: jdkgjdkjg
# databases:
# - host: localhost
# port: 3306
# user: user
# pass: password
# name: database1
# charset: utf8
# - host: localhost
# port: 3306
# user: user2
# pass: password2
# name: database2
# charset: utf8
for
dbin conf[
'databases'
] :
filename
=
"%s_%s.sql"
%
(db[
'name'
], datetime.now().strftime(
"%Y%m%d-%H-%M-%S"
))
filepath
=
"%s/%s"
%
(conf[
'local-backup-path'
], filename)
cmd
=
"mysqldump -h%s -u%s -p%s -P%s --single-transaction %s > %s"
%
(
db[
'host'
],
db[
'user'
],
db[
'pass'
],
db[
'port'
],
db[
'name'
],
filepath
)
os.system(cmd)
cmd
=
"gzip %s"
%
filepath
os.system(cmd)
filepath
=
filepath
+
'.gz'
dbx
=
dropbox.Dropbox(conf[
'dropbox-token'
])
backuppath
=
"%s/%s/%s/%s"
%
(
conf[
'remote-backup-path'
],
# remote path
datetime.now().strftime(
"%Y%m%d"
),
# date string
conf[
'server-name'
],
# server name
filename
+
'.gz'
)
with
open
(filepath,
'rb'
) as f:
time
=
datetime.now().strftime(
"%Y-%m-%d %H:%M:%S "
)
print
(time
+
"Uploading "
+
filepath
+
" to Dropbox as "
+
backuppath)
try
:
dbx.files_upload(f.read(), backuppath, mode
=
WriteMode(
'overwrite'
))
except
ApiErroras err:
# This checks for the specific error where a user doesn't have
# enough Dropbox space quota to upload this file
if
(err.error.is_path()
and
err.error.get_path().error.is_insufficient_space()):
sys.exit(
"ERROR: Cannot back up; insufficient space."
)
elif
err.user_message_text:
print
(err.user_message_text)
sys.exit()
else
:
print
(err)
sys.exit()
|
简单描述下这个代码的思路,这个程序应该满足这个几个要求:
为了完成这些要求,首先碰到的难题是怎么支持配置文件,一搜,原来 Python 下有个默认的 ConfigParser,可以完成这个任务,但是正常东西比较恶心的是,配置文件必须是以 [Section] 为单位组织的。其实我的配置显然有些全局配置,还有就是数据库的各种信息是多次重复的,这种配置文件,嵌套能力简直糟糕,必须两层的结构,就很恶心。于是我去网上搜配置文件的格式,好多文章比较了各种配置文件的优劣,其实这文章挺多的,我想了想,以后或许我也可以写文章讲讲我自己的感受了。反正就是很多文章最后都公认 YAML 是配置文件里最完美的。于是我也决定用这个,果然也有现成的类库,就是 PyYAML,特方便,就俩函数 load 和 dump,直接就把文件变成 dict 格式了.
第二个难题,就是上传 Dropbox,后来发现,官方提供了很丰富的 API,而且直接就有 SDK,(让我眼红的是,官方竟然没有 PHP 的 SDK,这么不受待见么?),研究 SDK 用法,发现直接就有代码范例,于是直接抄到我的代码里,瞬间完成了 50% 的代码,爽! 。
整个代码完成后,我发现,写代码一共也没花多少时间,而且,我学会的 Python 的方式,我以前一直抱怨 Python 的文档难用,我发现,其实,最好的方式其实是在交互式的 Shell 里,用 help 来查询 API,再辅佐以官方文档,才是比较正确的方式。这是刷新了一个我以前的认识的地方。实践下来感觉还不错的。Python 的包管理器 pip 也很好用.
1
2
|
pip
install
PyYAML
pip
install
dropbox
|
原文链接:https://sexywp.com/use-python-to-backup-database-to-dropbox.htm 。
最后此篇关于Python脚本实现自动将数据库备份到 Dropbox的文章就讲到这里了,如果你想了解更多关于Python脚本实现自动将数据库备份到 Dropbox的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想将文件从服务器推送到我自己的 Dropbox。我可以在服务器上存储 API token 甚至(虽然不情愿)帐户密码。我不想在服务器上安装 Dropbox。 我还需要在 Dropbox 开发者主页创
有没有办法通过 Dropbox 选择器获取用于共享文档的短网址? 最佳答案 不,不像 Dropbox Core API , Dropbox Chooser不提供获取短 URL 的能力。 当然,这并不妨
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我正在尝试开发一个使用某种云存储的应用程序。我认为 dropbox 非常适合使用。我已经有了我的应用 key 和应用 key 。 在他们为 DBRoulette 提供的示例中,您通过外部 GUI 登录
我正尝试在我的网络应用程序中迁移到 dropbox-api v2。目前我有打开弹出窗口的实现,用户连接到他/她的保管箱,我得到 token 。我用它来访问用户在后续步骤中在 Dropbox.choos
我正尝试在我的网络应用程序中迁移到 dropbox-api v2。目前我有打开弹出窗口的实现,用户连接到他/她的保管箱,我得到 token 。我用它来访问用户在后续步骤中在 Dropbox.choos
据我所知Zapier基本使用Webhooks将服务相互链接。支持的服务之一是 Dropbox .但是 Dropbox(仍然)不支持 webhook。 (即:Dropbox 无法向选择的任意 webho
Dropbox 是否可以在文件更改时发出通知,即新上传的到达或文件已更改。 最佳答案 正如 Kannan 所指出的,有一个名为 /delta 的新 API 端点。这比轮询或 RSS 更好。 这也可以与
Dropbox Rest api,在函数metatada中有一个名为“hash”的参数https://www.dropbox.com/developers/reference/api#metadata
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我需要用户授予我的应用访问他们 Dropbox 的权限,但我非常希望他们不必离开我的网站然后再回来。我所知道的身份验证 API 要求用户登录到他们的 Dropbox 帐户,并且他们在 Dropbox
是否可以在拥有该应用程序的所有用户帐户之间共享应用程序保存的数据? 最佳答案 这不是受支持的操作;数据存储 API 实际上是作为本地存储的同步替代品,而不是作为访问单个共享数据库的方式。 更新:现在支
问题是如何在中列出最近修改过的文件保管箱 帐户使用他们的 API? 保管箱 web UI 可以显示 recently changed files 的摘要,但我在他们的 API documentatio
如何使用 dropbox api 编辑文件或文件夹名称? 我正在使用这个引用: https://www.dropbox.com/developers/core/docs 还有什么吗? 这可能吗? 最佳
我正在尝试使用他们的 java API(版本 2-beta-4)将一些文件上传到保管箱,但其中一些文件具有相同的名称。 我想知道的是:我发送文件(例如“file.txt”)到保管箱的原因是什么,该文件
在the document of Dropbox Chooser我们可以从 files[0].link 获取共享页面 url,但我们需要直接下载链接。我如何获得它? 最佳答案 我在 the forum
我正在尝试将一些文件从一个文件夹移动到另一个文件夹。 这是我的 curl 请求: curl -X POST https://api.dropboxapi.com/2/files/move \ --
我有一个网络应用程序,用户可以在其中上传他的 Logo 图片 使用 dropbox api 我可以将文件保存到一个很棒的 dropbox 文件夹中 但是我想获取下载链接,以便使用我的 angular
我需要一个简单的网络表单,它还可以让人们上传一些 pdf。我想我可以做的(因为上传文件的大小和数量)是将这个应用程序的后端绑定(bind)到我的 Dropbox 帐户或我的 box.com 帐户。两种
我是一名优秀的程序员,十分优秀!