# SIGMA-COE — Estrategia de Backups

## 1. Bases de Datos

### Frecuencia

| Tipo | Frecuencia | Retención |
|------|-----------|-----------|
| Completo (mysqldump) | Diario | 30 días |
| Completo (mysqldump) | Semanal | 12 semanas |
| Completo (mysqldump) | Mensual | 12 meses |

### Comando

```bash
# Backup completo
mysqldump -u usuario_bd -p \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  sigma_coe_db > /backups/db/sigma_coe_$(date +%Y%m%d_%H%M%S).sql

# Comprimir
gzip /backups/db/sigma_coe_*.sql
```

### Restore

```bash
gunzip -c /backups/db/sigma_coe_20260101_120000.sql.gz | mysql -u usuario_bd -p sigma_coe_db
```

## 2. Archivos (Uploads)

### Rutas a respaldar

```
public_html/api/uploads/evidencias/
public_html/api/uploads/adjuntos/
public_html/api/uploads/temporales/
```

### Frecuencia

| Tipo | Frecuencia | Retención |
|------|-----------|-----------|
| Incremental (rsync) | Cada 6 horas | 7 días |
| Completo (tar.gz) | Diario | 30 días |

### Comando

```bash
# Backup completo de uploads
tar -czf /backups/uploads/uploads_$(date +%Y%m%d).tar.gz \
  -C /home/usuario/public_html/api/uploads .
```

## 3. Configuración

### Archivos a respaldar

```
.env
api/config/app.php
api/config/database.php
```

### Frecuencia

Con cada cambio en producción (post-deploy).

## 4. Almacenamiento

| Destino | Prioridad |
|---------|-----------|
| Disco local del servidor | Alta (siempre) |
| Amazon S3 / Backblaze B2 | Media (si contratado) |
| Descarga local administrador | Baja (manual semanal) |

## 5. Script Automatizado

Crear `/home/usuario/scripts/backup.sh`:

```bash
#!/bin/bash
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups"
DB_NAME="sigma_coe_db"
MYSQL_CNF="/home/usuario/.my.cnf"

# .my.cnf (chmod 600) debe contener:
# [client]
# user = usuario_bd
# password = contraseña_real

mkdir -p $BACKUP_DIR/{db,uploads,config}

# BD (usa .my.cnf en lugar de -p en texto plano)
mysqldump --defaults-extra-file=$MYSQL_CNF --single-transaction $DB_NAME | gzip > $BACKUP_DIR/db/${DB_NAME}_$TIMESTAMP.sql.gz

# Uploads
tar -czf $BACKUP_DIR/uploads/uploads_$TIMESTAMP.tar.gz -C /home/usuario/public_html/api/uploads .

# Config
cp /home/usuario/.env $BACKUP_DIR/config/env_$TIMESTAMP.bak
cp /home/usuario/public_html/api/config/app.php $BACKUP_DIR/config/app_$TIMESTAMP.php

# Limpiar backups antiguos (30 días)
find $BACKUP_DIR/db -name "*.sql.gz" -mtime +30 -delete
find $BACKUP_DIR/uploads -name "*.tar.gz" -mtime +30 -delete
find $BACKUP_DIR/config -name "*.bak" -mtime +30 -delete
```

### Cron (cPanel)

```
0 2 * * * /bin/bash /home/usuario/scripts/backup.sh >/dev/null 2>&1
0 2 * * 0 find /backups/db -name "weekly*" -mtime +84 -delete
```

## 6. Prueba de Restauración

Ejecutar mensualmente:

```bash
# Crear BD temporal
mysql -u root -p -e "CREATE DATABASE sigma_coe_restore_test"

# Restaurar
gunzip -c /backups/db/sigma_coe_latest.sql.gz | mysql -u root -p sigma_coe_restore_test

# Verificar
mysql -u root -p -e "SELECT COUNT(*) as usuarios FROM sigma_coe_restore_test.usuarios"
mysql -u root -p -e "SELECT COUNT(*) as fichas FROM sigma_coe_restore_test.fichas"

# Limpiar
mysql -u root -p -e "DROP DATABASE sigma_coe_restore_test"
```

## 7. Checklist Diario

- [ ] Backup BD completado exitosamente
- [ ] Backup uploads completado
- [ ] Espacio en disco suficiente (>20% libre)
- [ ] Logs sin errores críticos
