# Backup su MariaDB: come proteggere i tuoi dati

I backup sono indispensabili per il funzionamento sicuro di ogni database. Un’interruzione, un aggiornamento errato o un incidente di sicurezza può cancellare i dati in modo irreversibile. In questo tutorial imparerai come proteggere efficacemente i database ed effettuare un backup completo di MariaDB.

## Tipi di backup su MariaDB: logico e fisico

[MariaDB](https://www.ionos.it/digitalguide/server/know-how/cose-mariadb/) distingue tra due tipi di [backup](https://www.ionos.it/digitalguide/server/sicurezza/che-cose-un-backup/):

- I **backup logici** memorizzano i dati in un formato eseguibile SQL. Contengono istruzioni come `CREATE TABLE` e `INSERT INTO`, che consentono di ripristinare la struttura e i contenuti del database. I backup logici sono adatti quando si desidera trasferire dati su altri sistemi, altre versioni o persino su altri sistemi di database.
- I **backup fisici** copiano direttamente i file e le directory del database dal filesystem. Questo metodo è più veloce ed efficiente, specialmente con grandi quantità di dati. Tuttavia, funziona in modo affidabile solo se server, formati di archiviazione e versioni di MariaDB rimangono identici.

Per molti scenari si consiglia una combinazione di entrambe le metodologie: ad esempio, dump logici per singoli dati o tabelle e backup fisici per ripristini completi e rapidi.

## Creare un backup su MariaDB: quali opzioni ci sono?

MariaDB offre diversi strumenti per effettuare il backup dei dati. A seconda dell’uso, della quantità di dati e dell’ambiente di sistema, si possono impiegare metodi diversi.

### mariadb dump

`mariadb dump` è lo strumento di backup più conosciuto di MariaDB. Crea backup logici e salva i dati come **file SQL**. Questo file può essere ripristinato successivamente con il client MariaDB.

**Vantaggi:**

- Funziona su qualsiasi sistema con client MariaDB
- Esegue il backup di tabelle, singole o di tutto il database
- Compatibile con altre versioni di MariaDB e MySQL

**Svantaggi:**

- Grandi quantità di dati allungano il tempo di backup e ripristino
- Durante il backup possono verificarsi picchi di carico

### mariadb backup

`mariadb backup` esegue il backup dei dati fisicamente. Lo strumento si basa su **Percona XtraBackup** ed è stato ampliato per MariaDB. Supporta crittografia e compressione.

**Vantaggi:**

- Rapido ed efficiente con grandi quantità di dati
- Esegue backup durante il funzionamento (Hot Backup)
- Adatto per sistemi produttivi con tabelle [InnoDB](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/che-cose-innodb/)

**Svantaggi:**

- Funziona solo con InnoDB (non con MyISAM)
- Maggiore impegno nella configurazione e nel ripristino

### Altre opzioni

- **mariadb-hotcopy:** strumento più vecchio per tabelle MyISAM (non più supportato)
- **LVM-Snapshots:** backup a livello di filesystem per l’intero sistema. Molto veloce, ma complesso
- **dbForge Studio:** soluzione grafica per sistemi Windows con interfaccia intuitiva

## Esempio pratico: effettuare un backup su MariaDB con mariadb dump

Hai bisogno di accesso al server di database e di un account utente con permessi di backup (per esempio root). Apri un terminale o una connessione SSH. Assicurati che il comando `mariadb dump` sia installato e disponibile nel percorso.

### Eseguire il backup di tutti i database

Esegui il seguente comando:

```bash
mariadb-dump -u root -p --all-databases --result-file=/backups/backup_all.sql
```

**Spiegazione:**

- `-u root`: imposta l’utente root.
- `-p`: richiede l’inserimento della password.
- `--all-databases`: esegue il backup di tutti i database esistenti.
- `--result-file`: imposta il file di destinazione per il backup.

Il backup include tutti i database, compresa la gestione degli utenti, i trigger, le viste e le tabelle di sistema.

### Eseguire il backup di un database specifico

Il comando seguente `--databases shop_db` esegue il backup solo del database specificato.

```bash
mariadb-dump -u root -p --databases shop_db --result-file=/backups/shop_db.sql
```

Se desideri evitare l’istruzione `CREATE DATABASE` nel dump, utilizza:

```bash
mariadb-dump -u root -p shop_db --result-file=/backups/shop_db.sql
```

In questo caso, devi creare tu stesso il database al momento del ripristino.

### Eseguire il backup di più database

Di seguito, elenca i database da includere nel backup. Crea un file SQL con istruzioni per tutti i database elencati.

```bash
mariadb-dump -u root -p --databases db1 db2 db3 --result-file=/backups/multiple.sql
```

### Eseguire il backup di singole tabelle

Indichiamo il database e le tabelle desiderate direttamente nel comando. Questo è utile per esportazioni mirate, ad esempio durante la migrazione di singole tabelle.

```bash
mariadb-dump -u root -p db_name table1 table2 --result-file=tables.sql
```

### Opzioni possibili per mariadb dump

<table>
  <thead>
    <tr>
      <th>Opzione</th>
      <th>Descrizione</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`--no-data`</td>
      <td>Esegue il backup solo della struttura, non dei dati</td>
    </tr>
    <tr>
      <td>`--no-create-info`</td>
      <td>Esegue il backup solo dei dati, senza la struttura delle tabelle</td>
    </tr>
    <tr>
      <td>`--routines`</td>
      <td>Esegue il backup di procedure e funzioni</td>
    </tr>
    <tr>
      <td>`--events`</td>
      <td>Esegue il backup degli eventi pianificati</td>
    </tr>
    <tr>
      <td>`--single-transaction`</td>
      <td>Backup senza blocchi per le tabelle InnoDB</td>
    </tr>
    <tr>
      <td>`--quick`</td>
      <td>Riduce il fabbisogno di memoria per tabelle grandi</td>
    </tr>
  </tbody>
</table>

### MariaDB: automatizzare il backup con Cron

Automatizza i backup giornalieri con un [cronjob](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/cronjob/). Apri la tabella Cron:

```bash
crontab -e
```

Inserisci questa riga per creare, ad esempio, un backup giornaliero alle 3 del mattino:

```bash
0 3 ** * mariadb-dump -u root -p password --all-databases --result-file=/backups/backup-$(date +\%F).sql
```

Per motivi di sicurezza, non salvare le password direttamente nella tabella Cron. Invece, crea un file di configurazione `.my.cnf` nella directory Home:

```bash
[client]
user=root
password=password
```

Imposta i permessi di accesso:

```bash
chmod 600 ~/.my.cnf
```

Quindi, utilizza la seguente variante senza password nei cronjob:

```bash
mariadb-dump --all-databases --result-file=/backups/backup-$(date +\%F).sql
```

Utilizza `mariadb dump` preferibilmente per backup flessibili, indipendenti dal sistema e per quantità di dati più piccole. Per sistemi produttivi con grandi quantità di dati, si consiglia `mariadb backup`. Esegui backup regolari e verificali con prove di ripristino. Solo un backup verificato ti protegge affidabilmente dalla perdita di dati.


This is a markdown version of: [https://www.ionos.it/digitalguide/hosting/tecniche-hosting/backup-su-mariadb/](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/backup-su-mariadb/) for AI/LLM consumption.