Script en Python para realizar respaldos de MySQL

Tema en 'Programación & Programación Web' iniciado por Mandr4k3, 29 Mar 2018.

Etiquetas:
  1. Mandr4k3

    Mandr4k3 Usuario Casual nvl. 2
    17/41

    Registrado:
    8 Jun 2006
    Mensajes:
    2.845
    Me Gusta recibidos:
    8
    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.

    Insertar CODE, HTML o PHP:
    #!/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

    Insertar CODE, HTML o PHP:
    #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
     
  2. whoami

    whoami Usuario Nuevo nvl. 1
    17/41

    Registrado:
    6 Ene 2018
    Mensajes:
    113
    Me Gusta recibidos:
    24
    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
     
    #2 whoami, 30 Mar 2018
    Última edición: 30 Mar 2018
  3. Mandr4k3

    Mandr4k3 Usuario Casual nvl. 2
    37/41

    Registrado:
    8 Jun 2006
    Mensajes:
    2.845
    Me Gusta recibidos:
    8
    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 :)