import subprocess
import os
import datetime
# Configuració de la connexió a la base de dades
DB_HOST = 'DB_HOST' # Host de la base de dades
DB_USER = 'DB_USER' # Usuari de la base de dades
DB_PASS = 'DB_PAS' # Contrasenya de la base de dades
DB_NAME = 'polidic_cat' # Nom de la base de dades
BACKUP_PATH = './backups/' # Directori on es desaran les còpies de seguretat
# Crear el directori de backups si no existeix
if not os.path.exists(BACKUP_PATH):
os.makedirs(BACKUP_PATH)
# Generar el nom del fitxer de backup amb la data actual
date = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
file_name = f"{DB_NAME}_{date}.sql"
backup_file_path = os.path.join(BACKUP_PATH, file_name)
# Comanda per fer el backup de la base de dades (per MySQL)
dump_cmd = f"mysqldump -h {DB_HOST} -u {DB_USER} -p{DB_PASS} {DB_NAME} > {backup_file_path}"
# Executar la comanda
try:
subprocess.run(dump_cmd, shell=True, check=True)
print(f"Còpia de seguretat creada correctament: {backup_file_path}")
except subprocess.CalledProcessError as e:
print(f"Error al crear la còpia de seguretat: {e}")
Per realitzar una còpia de seguretat diària d’una base de dades utilitzant Python, pots fer servir llibreries com subprocess
per invocar les eines natives de la teva base de dades (com mysqldump
per MySQL o pg_dump
per PostgreSQL) i guardar el resultat en un fitxer. A continuació, et mostro un exemple de script que faria aquesta tasca per una base de dades MySQL.
Exemple de Script en Python per Fer una Còpia de Seguretat Diària
import subprocess
import os
import datetime
# Configuració de la connexió a la base de dades
DB_HOST = 'DB_HOST' # Host de la base de dades
DB_USER = 'DB_USER' # Usuari de la base de dades
DB_PASS = 'DB_PAS' # Contrasenya de la base de dades
DB_NAME = 'polidic_cat' # Nom de la base de dades
BACKUP_PATH = './backups/' # Directori on es desaran les còpies de seguretat
# Crear el directori de backups si no existeix
if not os.path.exists(BACKUP_PATH):
os.makedirs(BACKUP_PATH)
# Generar el nom del fitxer de backup amb la data actual
date = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
file_name = f"{DB_NAME}_{date}.sql"
backup_file_path = os.path.join(BACKUP_PATH, file_name)
# Comanda per fer el backup de la base de dades (per MySQL)
dump_cmd = f"mysqldump -h {DB_HOST} -u {DB_USER} -p{DB_PASS} {DB_NAME} > {backup_file_path}"
# Executar la comanda
try:
subprocess.run(dump_cmd, shell=True, check=True)
print(f"Còpia de seguretat creada correctament: {backup_file_path}")
except subprocess.CalledProcessError as e:
print(f"Error al crear la còpia de seguretat: {e}")
Explicació del Script:
- Configuració de la Connexió:
- Defineix els paràmetres de connexió (
DB_HOST
,DB_USER
,DB_PASS
,DB_NAME
) per accedir a la base de dades. - Especifica el directori on es desaran les còpies de seguretat (
BACKUP_PATH
).
- Creació del Directori de Backups:
- Si el directori de backups no existeix, el crea automàticament.
- Nom del Fitxer de Backup:
- El nom del fitxer inclou la data i hora actual per assegurar que cada còpia de seguretat tingui un nom únic.
- Comanda
mysqldump
:
- La comanda
mysqldump
és una eina proporcionada per MySQL per exportar una base de dades en format SQL. - La comanda s’executa mitjançant
subprocess.run
, que permet executar comandes del sistema des de Python.
- Gestió d’Errors:
- Si la comanda falla, es captura l’error i es mostra un missatge d’alerta.
Automatització del Script
Per fer que el script s’executi diàriament, pots configurar-lo com una tasca programada:
En Linux (usant cron
):
- Obre el crontab:
crontab -e
- Afegeix la següent línia per executar el script cada dia a les 02:00 AM:
0 2 * * * /usr/bin/python3 /ruta/al/tu/script.py
En Windows (usant Task Scheduler):
- Obre “Task Scheduler”.
- Crea una nova tasca i configura-la per executar el script cada dia a l’hora desitjada.
- Assegura’t que l’interpreti Python estigui disponible des de la línia d’ordres o especifica la ruta completa al teu script.
Notes Importants:
- Assegura’t que l’usuari de la base de dades té prou permisos per fer còpies de seguretat.
- Si utilitzes una base de dades diferent de MySQL (com PostgreSQL), has de canviar la comanda
mysqldump
per la corresponent (per exemple,pg_dump
per PostgreSQL). - Guarda el fitxer de contrasenya en un lloc segur i considera l’ús de variables d’entorn o eines de gestió de secrets per protegir les credencials.
Aquest script és una solució simple però eficaç per automatitzar les còpies de seguretat de la teva base de dades.
L’aplicació Task Scheduler de Synology pot crear una tasca que executi un script similar al descrit anteriorment.
Passos:
- Crea un script bash que utilitzi
mysqldump
per fer la còpia de seguretat (com l’exemple anterior). - Desa el script en una ubicació accessible des del teu DiskStation.
- Obre Control Panel > Task Scheduler.
- Crea una nova tasca:
- Tipus: Script personalitzat.
- Acció: Executa el teu script.
- Programació: Defineix l’hora i la freqüència (diària, setmanal, etc.).