最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python腳本實現(xiàn)自動將數(shù)據(jù)庫備份到 Dropbox

 更新時間:2017年02月06日 08:31:30   作者:sexywp  
本文給大家分享的是作者使用python腳本實現(xiàn)自動備份mysql數(shù)據(jù)庫到的dropbox網(wǎng)盤的代碼,非常的簡單實用,有需要的小伙伴可以參考下

最近,正好發(fā)生了一件大事,就是 GitLab 的運維同學不小心刪除了生產(chǎn)的數(shù)據(jù),雖然 GitLab 已經(jīng)駭人聽聞的準備了五種備份機制,但是,仍然導致他們丟失了將近 6 個小時的用戶數(shù)據(jù),尤其對他們聲譽的損失,是根本無法估量的。反思一下,這個博客 Becomin' Charles,也是沒有完善的備份的,真是冷汗直冒啊,主要考慮到這是我的個人博客,但是想想已經(jīng)堅持了快十年了,如果真的丟了的話,還是非常痛心的。

正好,老婆最近正在學習Python 編程,我在教她,其實,我是PHP 程序員,一點也不喜歡 Python,但是說實在,一個外行學編程的話,Python 確實比PHP 友好太多了,只能推薦她學 Python 了。正好,借著這個機會,我決定自己也學學 Python 編程吧,于是,我決定要用 Python 做一個數(shù)據(jù)庫的自動備份腳本。備份的位置,就用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()

簡單描述下這個代碼的思路,這個程序應該滿足這個幾個要求:

  • 使用 mysqldump 備份數(shù)據(jù)庫到本地
  • 應該支持配置文件,允許配置多個數(shù)據(jù)庫
  • 可以上傳到 Dropbox

為了完成這些要求,首先碰到的難題是怎么支持配置文件,一搜,原來 Python 下有個默認的 ConfigParser,可以完成這個任務,但是正常東西比較惡心的是,配置文件必須是以 [Section] 為單位組織的。其實我的配置顯然有些全局配置,還有就是數(shù)據(jù)庫的各種信息是多次重復的,這種配置文件,嵌套能力簡直糟糕,必須兩層的結(jié)構(gòu),就很惡心。于是我去網(wǎng)上搜配置文件的格式,好多文章比較了各種配置文件的優(yōu)劣,其實這文章挺多的,我想了想,以后或許我也可以寫文章講講我自己的感受了。反正就是很多文章最后都公認 YAML 是配置文件里最完美的。于是我也決定用這個,果然也有現(xiàn)成的類庫,就是 PyYAML,特方便,就倆函數(shù) load 和 dump,直接就把文件變成 dict 格式了。

第二個難題,就是上傳 Dropbox,后來發(fā)現(xiàn),官方提供了很豐富的 API,而且直接就有 SDK,(讓我眼紅的是,官方竟然沒有 PHP 的 SDK,這么不受待見么?),研究 SDK 用法,發(fā)現(xiàn)直接就有代碼范例,于是直接抄到我的代碼里,瞬間完成了 50% 的代碼,爽!

整個代碼完成后,我發(fā)現(xiàn),寫代碼一共也沒花多少時間,而且,我學會的 Python 的方式,我以前一直抱怨 Python 的文檔難用,我發(fā)現(xiàn),其實,最好的方式其實是在交互式的 Shell 里,用 help 來查詢 API,再輔佐以官方文檔,才是比較正確的方式。這是刷新了一個我以前的認識的地方。實踐下來感覺還不錯的。Python 的包管理器 pip 也很好用。

pip install PyYAML
pip install dropbox

相關文章

  • Python字符串類型及格式化問題

    Python字符串類型及格式化問題

    這篇文章主要介紹了Python字符串類型及格式化問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python實現(xiàn)簡單socket程序在兩臺電腦之間傳輸消息的方法

    python實現(xiàn)簡單socket程序在兩臺電腦之間傳輸消息的方法

    這篇文章主要介紹了python實現(xiàn)簡單socket程序在兩臺電腦之間傳輸消息的方法,涉及Python操作socket的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • python 基于opencv實現(xiàn)高斯平滑

    python 基于opencv實現(xiàn)高斯平滑

    這篇文章主要介紹了python 基于opencv實現(xiàn)高斯平滑,幫助大家更好的理解和使用python處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • 詳談Python3 操作系統(tǒng)與路徑 模塊(os / os.path / pathlib)

    詳談Python3 操作系統(tǒng)與路徑 模塊(os / os.path / pathlib)

    下面小編就為大家分享一篇詳談Python3 操作系統(tǒng)與路徑 模塊(os / os.path / pathlib),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 深入理解pytorch庫的dockerfile

    深入理解pytorch庫的dockerfile

    這篇文章主要介紹了pytorch庫的dockerfile,主要包括dockerfile命令,使用指令的注意點及存在的一些問題,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • 利用Python實現(xiàn)Markdown文檔格式轉(zhuǎn)換詳解

    利用Python實現(xiàn)Markdown文檔格式轉(zhuǎn)換詳解

    這篇文章主要介紹了如何利用Python中的MarkItDown庫將多種文件高效轉(zhuǎn)換為Markdown文本,以及如何使用Python-Markdown庫將Markdown文本轉(zhuǎn)換為HTML,需要的可以參考下
    2025-03-03
  • 利用Hyperic調(diào)用Python實現(xiàn)進程守護

    利用Hyperic調(diào)用Python實現(xiàn)進程守護

    這篇文章主要為大家詳細介紹了利用Hyperic調(diào)用Python實現(xiàn)進程守護,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python發(fā)送email的3種方法

    Python發(fā)送email的3種方法

    這篇文章主要介紹了Python發(fā)送email的3種方法,本文講解了使用登錄郵件服務器方法、調(diào)用sendmail命令、使用smtp服務來發(fā)送三種方法,需要的朋友可以參考下
    2015-04-04
  • Python實現(xiàn)代碼塊兒折疊

    Python實現(xiàn)代碼塊兒折疊

    這篇文章主要介紹了Python實現(xiàn)代碼塊兒折疊方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 對python中的logger模塊全面講解

    對python中的logger模塊全面講解

    下面小編就為大家分享一篇對python中的logger模塊全面講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04

最新評論

万载县| 抚顺市| 砚山县| 长宁县| 响水县| 咸丰县| 洛南县| 叶城县| 新干县| 汽车| 饶阳县| 固镇县| 天长市| 祁门县| 济宁市| 织金县| 安宁市| 乐昌市| 新乡县| 屏南县| 南陵县| 木里| 富顺县| 灵宝市| 忻州市| 石阡县| 博白县| 鄢陵县| 房山区| 商城县| 斗六市| 平昌县| 永和县| 内江市| 巨鹿县| 南充市| 额尔古纳市| 崇礼县| 兴宁市| 三江| 广水市|