# Backup y restore — V1.0.0

Los respaldos de MySQL y el ZIP del código son cosas distintas. Para recuperar completamente una instalación necesitas conservar **el proyecto/configuración** y **un respaldo SQL reciente**.

## Requisitos

Los scripts son únicamente CLI y utilizan las herramientas oficiales de MySQL/MariaDB:

- backup: `mysqldump` o `mariadb-dump`;
- restore: `mysql` o `mariadb`.

En XAMPP los scripts intentan detectar automáticamente `mysql/bin`. Si los ejecutables están en otra ubicación puedes definir:

```text
MYSQLDUMP_BIN=/ruta/al/mysqldump
MYSQL_BIN=/ruta/al/mysql
```

En Windows usa las rutas completas a los `.exe` correspondientes.

## Crear un respaldo

Desde la raíz del proyecto:

```bash
php scripts/backup.php
```

En XAMPP/Windows también puedes ejecutar:

```bat
C:\xampp\php\php.exe scripts\backup.php
```

El archivo se guarda en:

```text
storage/backups/sistema_isp_backup_YYYYMMDD_HHMMSS.sql
```

`storage/backups/` está fuera de `public/` y sus respaldos reales están ignorados por Git.

## Restaurar

Antes de restaurar:

1. crea un respaldo adicional de la base actual;
2. verifica que `config/database.php` apunta a la base DESTINO correcta;
3. si es posible, prueba primero sobre una base separada.

La restauración requiere confirmación explícita:

```bash
php scripts/restore.php storage/backups/sistema_isp_backup_YYYYMMDD_HHMMSS.sql --confirm
```

En Windows/XAMPP:

```bat
C:\xampp\php\php.exe scripts\restore.php storage\backups\sistema_isp_backup_YYYYMMDD_HHMMSS.sql --confirm
```

Sin `--confirm` el script se detiene sin modificar nada.

## Seguridad

- No existe una ruta web para descargar/restaurar la base.
- La contraseña DB se toma de `config/database.php` y se entrega al cliente MySQL mediante un archivo temporal de opciones, no como argumento visible del proceso.
- El archivo temporal se elimina al finalizar.
- No guardes respaldos reales dentro de `public/` ni los incluyas en repositorios.

## Limitación operativa

Los scripts necesitan `proc_open` habilitado y las herramientas CLI de MySQL/MariaDB instaladas. En hosting donde `proc_open` esté deshabilitado utiliza el mecanismo de backup del proveedor/servidor y conserva el mismo principio: respaldo SQL privado, probado sobre una base separada antes de una restauración real.
