Heim Backend-Entwicklung Python-Tutorial Python-Skript zum automatischen Sichern der Datenbank in Dropbox

Python-Skript zum automatischen Sichern der Datenbank in Dropbox

Feb 09, 2017 pm 05:57 PM

Kürzlich passierte etwas Großes: Die Betriebs- und Wartungsstudenten von GitLab löschten versehentlich die Produktionsdaten. Obwohl GitLab erstaunliche fünf Sicherungsmechanismen vorbereitet hatte, verloren sie dennoch fast 6 Stunden an Daten , und insbesondere ihr Ruf, ist einfach unermesslich. Wenn ich darüber nachdenke, gerät ich nicht wirklich ins Schwitzen, wenn man bedenkt, dass es sich um meinen persönlichen Blog handelt, aber ich habe fast zehn Jahre lang daran festgehalten Es ist wirklich verloren, aber immer noch sehr traurig.

Zufälligerweise lernt meine Frau seit Kurzem Python-Programmierung und ich unterrichte sie. Tatsächlich bin ich PHP-Programmiererin und mag Python überhaupt nicht, aber um ehrlich zu sein, wenn ich ein Laie bin lernt Programmieren, Python ist in der Tat viel benutzerfreundlicher als PHP. Ich kann ihr nur empfehlen, Python zu lernen. Glücklicherweise nutzte ich diese Gelegenheit und beschloss, selbst die Python-Programmierung zu erlernen, also beschloss ich, Python zu verwenden, um ein automatisches Sicherungsskript für die Datenbank zu erstellen. Als Backup-Speicherort verwende ich einfach Dropbox, da mein Server von Linode bereitgestellt wird, der sich im Computerraum von Fremont in den USA befindet. Es ist sinnvoller, den Speicherdienst in den USA zu wählen. Das Folgende ist der Code, den ich geschrieben habe, Python-Neuling, bitte geben Sie mir einige Ratschläge:

#!/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], &#39;r&#39;))
  
# 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[&#39;databases&#39;] :
  filename = "%s_%s.sql" % (db[&#39;name&#39;], datetime.now().strftime("%Y%m%d-%H-%M-%S")) 
  filepath = "%s/%s" % (conf[&#39;local-backup-path&#39;], filename)
  cmd = "mysqldump -h%s -u%s -p%s -P%s --single-transaction %s > %s" % (
      db[&#39;host&#39;],
      db[&#39;user&#39;], 
      db[&#39;pass&#39;], 
      db[&#39;port&#39;], 
      db[&#39;name&#39;], 
      filepath
      )
  os.system(cmd)
  cmd = "gzip %s" % filepath
  os.system(cmd)
  filepath = filepath + &#39;.gz&#39;
  dbx = dropbox.Dropbox(conf[&#39;dropbox-token&#39;])
  backuppath = "%s/%s/%s/%s" % (
      conf[&#39;remote-backup-path&#39;],    # remote path
      datetime.now().strftime("%Y%m%d"), # date string
      conf[&#39;server-name&#39;],       # server name
      filename + &#39;.gz&#39;)
  with open(filepath, &#39;rb&#39;) 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(&#39;overwrite&#39;))
    except ApiErroras err:
      # This checks for the specific error where a user doesn&#39;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()
Nach dem Login kopieren

Beschreiben Sie kurz die Idee dieses Codes. Dieses Programm sollte diese Anforderungen erfüllen:

Verwenden Die Sicherung der mysqldump-Datenbank auf lokal

sollte Konfigurationsdateien unterstützen, die die Konfiguration mehrerer Datenbanken ermöglichen

kann auf Dropbox hochgeladen werden

Um diese Anforderungen zu erfüllen, was ist Das erste aufgetretene Problem? Nach der Suche stellt sich heraus, dass es unter Python einen Standard-ConfigParser gibt, der diese Aufgabe erledigen kann. Das Ekelhafte an normalen Dingen ist jedoch, dass die Konfigurationsdateien in [Abschnitts]-Einheiten organisiert sein müssen . Tatsächlich hat meine Konfiguration offensichtlich einige globale Konfigurationen, und verschiedene Informationen in der Datenbank werden viele Male wiederholt. Die Verschachtelungsfähigkeit dieser Art von Konfigurationsdatei ist einfach schrecklich und erfordert eine zweischichtige Struktur, was widerlich ist. Also habe ich online nach Konfigurationsdateiformaten gesucht. Es gab viele Artikel, in denen die Vor- und Nachteile verschiedener Konfigurationsdateien verglichen wurden, und vielleicht kann ich einen Artikel über meine eigenen schreiben Gefühle in der Zukunft. Wie auch immer, viele Artikel stimmen schließlich darin überein, dass YAML die perfekteste Konfigurationsdatei ist. Deshalb habe ich mich dafür entschieden, dass es eine vorgefertigte Klassenbibliothek gibt, nämlich PyYAML, die mit nur zwei Funktionen, Laden und Dump, die Datei direkt in das Diktatformat konvertieren kann.

Das zweite Problem ist das Hochladen auf Dropbox. Später habe ich herausgefunden, dass die offizielle API eine sehr umfangreiche API bereitstellt und es direkt ein SDK gibt. (Was mich neidisch macht, ist, dass das offizielle SDK für PHP nicht verfügbar ist. Es ist so unbeliebt. Ich habe die Verwendung von SDK untersucht und festgestellt, dass es direkt Codebeispiele gibt, also habe ich es direkt in meinen Code kopiert und 50 % des Codes im Handumdrehen fertiggestellt.

Nachdem der gesamte Code fertiggestellt war, stellte ich fest, dass das Schreiben des Codes nicht viel Zeit in Anspruch nahm. Außerdem beschwerte ich mich darüber, dass die Dokumentation von Python meiner Meinung nach schwierig zu verwenden war Das ist in der Tat der beste und korrektere Weg, die API mithilfe von Help in einer interaktiven Shell abzufragen und dann mit offiziellen Dokumenten zu helfen. Dies ist ein Ort, der mein bisheriges Verständnis aufgefrischt hat. In der Praxis fühlt es sich ziemlich gut an. Der Paketmanager pip von Python ist ebenfalls sehr nützlich.

pip install PyYAML
pip install dropbox
Nach dem Login kopieren

Weitere Python-Skripte zum automatischen Sichern der Datenbank in Dropbox finden Sie auf der chinesischen PHP-Website für verwandte Artikel!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Apr 02, 2025 am 07:18 AM

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Apr 02, 2025 am 07:15 AM

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Was sind reguläre Ausdrücke? Was sind reguläre Ausdrücke? Mar 20, 2025 pm 06:25 PM

Regelmäßige Ausdrücke sind leistungsstarke Tools für Musteranpassung und Textmanipulation in der Programmierung, wodurch die Effizienz bei der Textverarbeitung in verschiedenen Anwendungen verbessert wird.

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Apr 01, 2025 pm 10:51 PM

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Was sind einige beliebte Python -Bibliotheken und ihre Verwendung? Was sind einige beliebte Python -Bibliotheken und ihre Verwendung? Mar 21, 2025 pm 06:46 PM

In dem Artikel werden beliebte Python-Bibliotheken wie Numpy, Pandas, Matplotlib, Scikit-Learn, TensorFlow, Django, Flask und Anfragen erörtert, die ihre Verwendung in wissenschaftlichen Computing, Datenanalyse, Visualisierung, maschinellem Lernen, Webentwicklung und h beschreiben

Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Apr 01, 2025 pm 11:18 PM

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...

See all articles