最近,正好发生了一件大事,就是 GitLab 的运维同学不小心删除了生产的数据,虽然 GitLab 已经骇人听闻的准备了五种备份机制,但是,仍然导致他们丢失了将近 6 个小时的用户html" target="_blank">数据,尤其对他们声誉的损失,是根本无法估量的。反思一下,这个博客 Becomin' Charles,也是没有完善的备份的,真是冷汗直冒啊,主要考虑到这是我的个人博客,但是想想已经坚持了快十年了,如果真的丢了的话,还是非常痛心的。
正好,老婆最近正在学习Python 编程,我在教她,其实,我是PHP 程序员,一点也不喜欢 Python,但是说实在,一个外行学编程的话,Python 确实比PHP 友好太多了,只能推荐她学 Python 了。正好,借着这个机会,我决定自己也学学 Python 编程吧,于是,我决定要用 Python 做一个数据库的自动备份脚本。备份的位置,就用Dropbox 来做吧,因为我的服务器是 Linode 提供的,美国 fremont 机房,选择美国的存储服务,比较合适。以下是我写得代码,Python 小白,敬请指教:
#!/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 也很好用。
pip install PyYAML pip install dropbox
本文向大家介绍Oracle自动备份脚本,包括了Oracle自动备份脚本的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了,具体代码如下所示: 接下来给大家介绍linux oracle自动备份脚本 1、备份脚本: 2、添加到任务调度 crontab -u oracle -e * 3 * * * /home/bakup/bakup.sh 即每天凌晨3点进行备份 如需每天备份多次
问题内容: 我尝试了许多脚本来进行数据库备份,但是我做不到。我想每小时备份一次数据库。 我将文件添加到“ /etc/cron.hourly/”文件夹,将其chmod更改为755,但未运行。至少我写了我的伪代码。 如果您可以为此操作编写脚本并告诉我该怎么办,我将非常高兴。将这个脚本文件添加到文件夹之后。 获取当前日期并创建一个变量, 为文件名创建一个变量, 像这样获取我的数据库的转储 删除文件夹中所
我尝试了很多数据库备份脚本,但都做不到。我想每小时备份一次数据库 我将文件添加到“/etc/cron.hourly/”文件夹,将其chmod更改为755,但没有运行。至少我写了我的伪代码。 如果你能为这次行动写一个脚本,告诉我应该做些什么,我会很高兴的?将此脚本文件添加到文件夹。 获取当前日期并创建一个变量, 为文件名创建一个变量, 像下面这样获取我的数据库转储文件
本文向大家介绍Python实现备份MySQL数据库的方法示例,包括了Python实现备份MySQL数据库的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现备份MySQL数据库的方法。分享给大家供大家参考,具体如下: 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python+MySQL数据库程序设计入门教程》、《Python常见数据库操作技巧汇总》、《P
本文向大家介绍CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中,包括了CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中的使用技巧和注意事项,需要的朋友参考一下 一、安装Email发送程序 二、安装FTP客户端程序 本脚本需要用到FTP客户端程序将文件上传到FTP空间上面,因此必须安装FTP客户端,否则将出现ftp命令无法找到的错误。
本文向大家介绍shell 备份数据库、代码上线的脚本,包括了shell 备份数据库、代码上线的脚本的使用技巧和注意事项,需要的朋友参考一下 Shell 脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。 备份MySQL数据库