Script en Python para realizar respaldos de MySQL

Mandr4k3

Usuario Casual nvl. 2
8 Jun 2006
2.666
9
37
Internet
Una de las labores más repetidas por los administradores de servidores es la de respaldos de la base de datos. Cuando se utiliza como servidores de aplicaciones o servidor para motores de base de datos una distribución de Linux me gusta utilizar o recomendar Python, por la sencillez y por la potencia que tiene.

En este sencillo ejemplo configuraremos un archivo backup.py para realizar respaldos de una base de datos MySQL y guardarlos en una carpeta.

Código:
#!/usr/bin/env python
import os
import time

# Configuración de la DDBB
username = 'usuario'
password = 'MiPassUsuarioDB'
hostname = '127.0.0.1'
port = 3306
dest_folder = '/home/usuario/folder_respaldo'
#Declaramos las base de datos que NO incluiremos en el backup, como las de sistemas, etc.
not_backup = ['information_schema', 'test', 'mysql', 'performance_schema']

Una vez que tenemos la configuración de los accesos y el destino de los respaldos aplicamos lógica

Código:
#Indicamos el formato del archivo por Año, Mes día
filestamp = time.strftime('%Y%m%d')
#Ejecutamos el comando como salida prompt
database_list_command="mysql -u%s -p%s -h %s -P %s --silent -N -e 'show databases'" % (username, password, hostname, port)
#Recorremos la lista de las bases de datos en el servidor
for database in os.popen(database_list_command).readlines():
database = database.strip()
# Condicionamos las bases de datos que NO vamos a realizar respaldo para que no las tome
if database in not_backup:
continue
filename = "%s/%s-%s.sql" % (dest_folder, filestamp, database)
# dump + gzip command
os.popen("mysqldump -u%s -p%s -h %s -P %s -e --opt -c %s | gzip -c > %s.gz" % (username, password, hostname, port, database, filename))

Para finalizar escribimos en /etc/crontab

0 0 * * * usuario_ejecuta_trabajo python /ruta/backup.py
Para descargar el ejemplo: https://pastebin.com/b7uqn3iS
 
En GNU/Linux, podrias facilmente replicarlo en un shell script.
No soy un programador o guionista, aun menos de Python, pero hubiese sido mejor con un Python mas-puro(?). Aunque desconozco si hay librerías o módulos, con la manera de omitir las partes donde dependes de los binarios externos (/usr/bin/mysql;/usr/bin/mysqldump).

Espero no molestar con mi comentario.
Gracias por el aporte.
Saludos! :v
 
Última edición:
En GNU/Linux, podrias facilmente replicarlo en un shell script.
No soy un programador o guionista, aun menos de Python, pero hubiese sido mejor con un Python mas-puro(?). Aunque desconozco si hay librerías o módulos, con la manera de omitir las partes donde dependes de los binarios externos (/usr/bin/mysql;/usr/bin/mysqldump).

Espero no molestar con mi comentario.
Gracias por el aporte.
Saludos! :v

Para nada! esto es para compartir. Con shell script también se puede hacer o mi preferido en C. Hay muchas maneras y creo que esto es parte de los foros, debatir y seguir compartiendo conocimiento :)