domingo, 6 de abril de 2014

Dropbox MySQL Backup Python


Dropbox se a vuelto hoy en día una de las herramientas más imprescindibles para cualquier negocio. Esta pequeña startup ha conseguido que todos mantengamos nuestros archivos en la nube y podamos disponer de ellos de una forma sincronizada y en cualquiera de nuestros dispositivos (android, ios, mac, pc linux, etc...). Hace un tiempo lanzo una API en su espacio para desarrolladores para poder acceder a los archivos y, lo más importante, crear aplicaciones sobre su servicio de almacenamiento en la nube.
Es un servicio, que permite la creación de un mundo infinito de aplicaciones, que aunque se puede hacer con otro tipo de servicios, el api de dropbox nos ofrece una facilidad inigualable a la hora de desarrollarlo. 
La API cuenta con SDKs para iOS, Android, Python, Ruby y Java. Las aplicaciones creadas deberán ser registradas en Dropbox para obtener un App Key, los usuarios concederán acceso a las aplicaciones de forma centralizada desde la propio web de Dropbox. En principio todas las aplicaciones que desarrollemos accederán a un carpeta dedicada, sólo determinadas aplicaciones aprobadas y revisadas por Dropbox podrán solicitar permisos para acceder a todos los ficheros del usuario. Se podrá buscar, descargar y subir ficheros. Las peticiones REST API viajan por SSL para mayor seguridad

DROPBOX API BACKUP PostgreSQL PYTHON

Hoy les voy a dejar un ejemplo de para hacer un backup  automático de nuestra base de datos MySQL con dropbox. Realmente nos va a servir no solo para respaldar la base de datos sino para cualquier archivo que necesitemos respaldar en el Dropbox.
Este fichero lo hago con el fin de poder respaldar de manera automática la base de datos de un sistema en producción, y así ahorrarse la problemática de estarlo haciendo a diario o semanal, y tener que descargar directamente a nuestra computadora la base de datos.  Sino que simplemente un Cron y listo.


Python Wrap
Junto con el src del dropbox viene un archivo de ejemplo que es una consola interactiva con comandos comunes en linux como ls, cat, cd, put, etc... e adaptado un poco esta consola para manejar archivos, y simplificar AUN MAS el uso del API de dropbox. Nos permite logear un usuario, y guardar la sesión del usuario en un archivo, para no tener que re-introducir los datos.

backup.py

Lo primero que necesitamos es registrar nuestra aplicación en dropbox https://www.dropbox.com/developers/apps/create, luego necesitamos tener instalado gzip, para comprimir archivos o cualquier otro comando que necesitemos. y este es el archivo:
import os, datetime

from DropboxWrap import DropboxTerm

# app key y secret de la pagina de desarolladores de dropbox
app_key = ''
app_secret = ''

#Datos para conectarnos a la base de datos
username = ""
password = ""
hostname = ""
database = ""

today = datetime.datetime.today()

#Le damos nombre a la base de datos
filename = database+"-"+today.strftime("%d-%b-%Y-%H:%M:%S.sql")
filename_gz = filename+".gz"

#instanciamos la clase 
d = DropboxTerm(app_key,app_secret)

#comprobamos si esta el usuario logeado o no
if d.is_logged() == False:
    d.login()

#ejecutamos el comando y comprimimos el resultado, para que sea más ligero el archivo
os.popen("mysqldump -u %s --password='%s' -h %s -e --opt -c %s | gzip -c > '%s'" % (username, password, hostname, database, filename_gz))

#montamos el archivo resultante en el dropbox
print d.put(filename_gz,'/database/'+filename_gz)

#listo


Ya lo que nos quedaría es ejecutarlo por primera vez,  para autorizar el acceso a la aplicación y configurar el cronjob y listo.

Source en GITHUB

No hay comentarios:

Publicar un comentario