Principale > Blog sul backup e sul ripristino > Strumenti software per il backup di MySQL. Soluzioni di backup automatico di MySQL.

Strumenti software per il backup di MySQL. Soluzioni di backup automatico di MySQL.

Aggiornato 2nd Dicembre 2022, Rob Morrison

L’esigenza di backup del database MySQL non è così universale come quella dei backup regolari degli utenti finali, ma quando è necessario, diventa una parte particolarmente importante dell’infrastruttura di un’azienda. Il modulo di Bacula Enterprise per i backup MySQL consente agli utenti di eseguire backup di database MySQL efficienti e facili da usare – e soprattutto ripristini – in un tempo molto breve. Questo, ovviamente, è fondamentale per soddisfare gli obiettivi RTO (recovery time objectives). Questo articolo approfondisce la natura stessa di un processo di backup automatico di MySQL, compresi gli approcci gratuiti e a pagamento al backup e al ripristino, e le diverse opzioni di personalizzazione.

Diversi modi per creare un backup del database MySQL

Prima di passare alla soluzione di Bacula Enterprise, esaminiamo alcuni modi diversi e non convenzionali di creare un backup del database MySQL.

1. Backup automatico del database MySQL basato su Linux

Una certa utility basata su Linux/Unix con il nome di cron può eseguire backup di MySQL su questi sistemi. Si tratta di un’utility relativamente semplice che si avvia con il sistema e legge le sue istruzioni da un file specifico. Questo file di configurazione è solitamente memorizzato in /etc/crontab. Ecco un esempio di backup giornaliero impostato alle 2:30 del mattino:

 

30 2 * * * root mysqldump -u root -pPASSWORD –all-databases | gzip >
/mnt/disk2/database_`data ‘ %m-%d-%Y’`.sql.gz

Le prime cinque cifre del comando rappresentano l’ora e la data (minuti, ore, giorni del mese, mesi, giorni della settimana, rispettivamente), e mettere “*” al posto di uno di questi numeri significa che qualsiasi numero funziona.

2. Utilizza PHP per creare un file XML

È anche possibile ricreare il database come file XML, con l’aiuto di PHP. Non è il formato più sicuro al mondo quando si tratta di ripristinare i suoi dati, ma alcune persone lo preferiscono a qualsiasi altro. Questo frammento di codice qui sotto dovrebbe permetterle di esportare un database specifico nel file con formato .XML:

 

//connect
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);

//get all the tables
$query = ‘SHOW TABLES FROM ‘.$name;
$result = mysql_query($query,$link) or die(‘cannot show tables’);
if(mysql_num_rows($result))
{
            //prep output
            $tab = “\t”;
            $br = “\n”;
            $xml = ‘<?xml version=”1.0″ encoding=”UTF-8″?>’.$br;
            $xml.= ‘<database name=”‘.$name.'”>’.$br;            

            //for every table…
            while($table = mysql_fetch_row($result))
            {
                        //prep table out
                        $xml.= $tab.'<table name=”‘.$table[0].'”>’.$br;                       

                        //get the rows
                        $query3 = ‘SELECT * FROM ‘.$table[0];
                        $records = mysql_query($query3,$link) or die(‘cannot select from table: ‘.$table[0]);                       

                        //table attributes
                        $attributes = array(‘name’,’blob’,’maxlength’,’multiple_key’,’not_null’,’numeric’,’primary_key’,’table’,’type’,’default’,’unique_key’,’unsigned’,’zerofill’);
                        $xml.= $tab.$tab.'<columns>’.$br;
                        $x = 0;
                        while($x < mysql_num_fields($records))
                        {
                                    $meta = mysql_fetch_field($records,$x);
                                    $xml.= $tab.$tab.$tab.'<column ‘;
                                    foreach($attributes as $attribute)
                                    {
                                               $xml.= $attribute.’=”‘.$meta->$attribute.'” ‘;
                                    }
                                    $xml.= ‘/>’.$br;
                                    $x++;
                        }
                        $xml.= $tab.$tab.'</columns>’.$br;                       

                        //stick the records
                        $xml.= $tab.$tab.'<records>’.$br;
                        while($record = mysql_fetch_assoc($records))
                        {
                                    $xml.= $tab.$tab.$tab.'<record>’.$br;
                                    foreach($record as $key=>$value)
                                    {
                                               $xml.= $tab.$tab.$tab.$tab.'<‘.$key.’>’.htmlspecialchars(stripslashes($value)).'</’.$key.’>’.$br;
                                    }
                                    $xml.= $tab.$tab.$tab.'</record>’.$br;
                        }
                        $xml.= $tab.$tab.'</records>’.$br;
                        $xml.= $tab.'</table>’.$br;
            }
            $xml.= ‘</database>’;           

            //save file
            $handle = fopen($name.’-backup-‘.time().’.xml’,’w+’);
            fwrite($handle,$xml);
            fclose($handle);
}

3. Utilizzare PHP come metodo di backup in primo luogo

Un altro modo di utilizzare PHP per le sue esigenze di backup è quello di prendere una query di backup del database da un file PHP e utilizzarla. La query nell’esempio seguente è SELECT INTO OUTFILE.

 

<?php
include ‘config.php’;
include ‘opendb.php’; 

$tableName  = ‘mypet’;
$backupFile = ‘backup/mypet.sql’;
$query      = “SELECT * INTO OUTFILE ‘$backupFile’ FROM $tableName”;
$result = mysql_query($query); 

include ‘closedb.php’;
?>

E naturalmente, avrà bisogno di un modo per ripristinare quel tipo di backup. Ecco la query per questo, è una query LOAD DATA INFILE:

 

<?php
include ‘config.php’;
include ‘opendb.php’; 

$tableName  = ‘mypet’;
$backupFile = ‘mypet.sql’;
$query      = “LOAD DATA INFILE ‘backupFile’ INTO TABLE $tableName”;
$result = mysql_query($query); 

include ‘closedb.php’;
?>

4. Backup con SSH

Il backup tramite SSH è fattibile anche per un database MySQL particolarmente grande. Nel suo pannello Plesk, inizi ad abilitare l’accesso alla shell e poi utilizzi qualsiasi strumento che possa accedere al server in questione tramite SSH (PuTTY o uno strumento simile). Per prima cosa, però, dovrà specificare una directory di destinazione per il suo futuro backup:

 

CD wwwroot/dbbackup

E poi utilizzerà mysqldump per esportare il database in un file specifico all’interno di un server:

 

mysqldump –add-drop-table -u db_username -p db_name > mybackup.sql

5. Script Server Shell per il backup di un database MySQL tramite Ubuntu

Se dispone di un server VPS dedicato con Ubuntu Linux a bordo, ha un’ulteriore opzione. Può utilizzare uno script di shell specifico per eseguire il backup di tutti i database sul suo server FTP. Ecco un esempio:

 

#!/bin/bash
### MySQL Server Login Info ###
MUSER=”root”
MPASS=”MYSQL-ROOT-PASSWORD”
MHOST=”localhost”
MYSQL=”$(which mysql)”
MYSQLDUMP=”$(which mysqldump)”
BAK=”/backup/mysql”
GZIP=”$(which gzip)”
### FTP SERVER Login info ###
FTPU=”FTP-SERVER-USER-NAME”
FTPP=”FTP-SERVER-PASSWORD”
FTPS=”FTP-SERVER-IP-ADDRESS”
NOW=$(date +”%d-%m-%Y”)

### See comments below ###
### [ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/* ###
[ ! -d “$BAK” ] && mkdir -p “$BAK”

DBS=”$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse ‘show databases’)”
for db in $DBS
do
FILE=$BAK/$db.$NOW-$(date +”%T”).gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done 

lftp -u $FTPU,$FTPP -e “mkdir /mysql/$NOW;cd /mysql/$NOW; mput /backup/mysql/*; quit” $FTPS

Dopo aver salvato questo segmento come file .sh, il passo successivo è impostare il livello di autorizzazione corretto per questo file specifico:

 

$ chmod +x /home/your-name/mysql.backup.sh

D’ora in poi potrà inserire uno dei due comandi per avviare il processo di backup:

 

/home/your-name/mysql.backup.sh

Oppure:

 

sudo /home/your-name/mysql.backup.sh

Può anche impostare questo script affinché venga eseguito come un lavoro cron. Ecco un esempio di script in esecuzione ogni giorno a mezzanotte, composto da due diversi prompt di comando:

 

$ sudo crontab -e

E:

 

@midnight /home/you/mysql.backup.sh >/dev/null 2>&1

È possibile che questi script funzionino anche con diverse distribuzioni UNIX o Linux.

6. Utilizzo di phpMyAdmin

phpMyAdmin è uno strumento open source che è anche gratuito e funziona con i database MySQL e MariaDB. L’ordine corretto degli input è il seguente:

  • Apra lo strumento in questione;
  • Selezioni il suo database di cui desidera creare un backup;
  • Scegliere l’opzione “export” nella barra di navigazione;
  • Clicchi sulla riga “display all possible options”;
  • Scegliere le tabelle specifiche di cui si vuole vedere il backup;
  • Modificare il tipo di compressione (o lasciarlo a gzipped, si consiglia di farlo);
  • Inizi il backup cliccando sul pulsante “go”

Questo conclude il nostro elenco delle opzioni di backup relativamente più popolari per le sue esigenze di backup di base del database MySQL.

Lo scopo del modulo di backup MySQL con Bacula Enterprise

Lo scopo generale del modulo di backup MySQL di Bacula Enterprise è quello di automatizzare i processi di backup e ripristino. Utilizzando questo modulo, l’amministratore di backup non deve conoscere tutti i dettagli delle tecniche di backup di MySQL e non è nemmeno richiesta la capacità di scrivere script. Il modulo stesso è in grado di eseguire una serie di funzioni diverse, tra cui il backup automatico dei file di configurazione e di altri dati di sistema importanti. Esistono due metodi di backup principali: dump e binario.

Binario o Dump?

Poiché esistono due tecniche di backup principali, è meglio presentare un confronto diretto di alcune delle loro caratteristiche in una tabella qui sotto.

Capacità Binario Dump
Ripristino di un singolo oggetto No Sì*
Dimensioni di backup Grande Piccolo
Velocità di backup Veloce Lento
Ripristino della velocità Veloce Molto lento
Capace di ripristinare in qualsiasi momento
Supporto di tipi di backup differenziali e incrementali
Consistenza
Backup online
Ripristino alla versione principale precedente di MySQL No Sì**
Ripristino alla versione principale più recente di MySQL No

* Per eseguire il ripristino di un singolo oggetto è necessaria la modifica manuale di un file di dump.

** Potrebbe essere necessaria una modifica manuale del file SQL per ripristinare un dump SQL a una versione precedente di MySQL, se sta utilizzando funzioni non disponibili sulla versione precedente. In generale, il ripristino a una versione precedente di MySQL non è garantito e non è supportato.

Come funziona: Modalità binaria

Il principio di funzionamento principale della modalità binaria è la sua interazione con Percona XtraBackup, che le consente di eseguire il processo di backup senza interromperlo all’inizio. È in grado di lavorare con InnoDB, XtraDB, MyISAM e altre tabelle con MySQL non modificato, o con un server Percona con XtraDB.

In precedenza esistevano due modi principali per eseguire una copia del database. Il primo implicava la copia del database attivo, e questo metodo aveva un’alta probabilità di avere ogni sorta di discrepanze nella copia, oppure poteva mancare tutte le modifiche avvenute nel database per il periodo di tempo in cui la copia veniva creata. Il secondo metodo implicava l’arresto completo del database per creare una copia coerente. Ma il problema del secondo modo è che potenzialmente (e di solito) ogni secondo in cui il database di un’azienda non funziona rappresenta una perdita di entrate, a prescindere da quanto piccolo sia il periodo di arresto.

Proprio a questo scopo, il modulo MySQL Percona di Bacula e lo strumento Percona XtraBackup offrono una soluzione efficace a questo problema, grazie alla possibilità di creare backup completi o incrementali di qualsiasi tipo di database MySQL attivo e funzionante. Un ulteriore vantaggio della modalità collegata a Percona è che non deve utilizzare file temporanei di grandi dimensioni, che sono i duplicati dei dati di cui si sta eseguendo il backup o il ripristino.

Il processo di ripristino è relativamente semplice: i dati vengono ripristinati in una posizione temporanea e poi modificati per essere coerenti con l’aiuto della funzione “prepara”. Questa funzione, con altre soluzioni, sarebbe molto onerosa in termini di risorse e non è qualcosa che si desidera eseguire durante una situazione di ripristino urgente. Pertanto, per evitare di aggiungere molto tempo al processo di ripristino, la funzione “prepara” di Bacula viene eseguita automaticamente e in anticipo, subito dopo la creazione del backup. Questo aggiunge un po’ di tempo al processo di backup, ma rende il processo di ripristino molto più veloce. In caso di emergenza, il tempo di ripristino è molto più critico del tempo di backup. E in una situazione in cui il database in questione è estremamente grande e ad alte transazioni, questa differenza di tempo può addirittura fare la differenza tra la capacità di un’organizzazione di rimanere in attività.

La necessità di questa combinazione del modulo Bacula Enterprise MySQL Percona e degli strumenti Percona deriva dall’esistenza problematica del MySQL tradizionale. Il problema principale della creazione di un “mysqldump” è che non si tratta di un vero backup binario dei dati; l’intero processo consiste nel convertire l’intero database in una grande quantità di istruzioni SQL e nell’elaborarle successivamente come parte del processo di ripristino. Questo processo, così com’è, diventa estremamente lento quanto più grande è il database.

Gli strumenti Percona sono utili quando c’è una situazione che comporta un carico pesante su MySQL in generale e sono necessarie sia le prestazioni che la stabilità per il corretto funzionamento del sistema.

Tutte le aziende che hanno bisogno di ripristinare il proprio server guasto in modo sicuro e rapido per proteggere la propria attività da un grave fallimento o addirittura dalla bancarotta, possono approfittare di questa speciale combinazione di strumenti Percona con le funzionalità di Bacula per rendere il processo di ripristino il più rapido possibile in un ambiente aziendale.

Come funziona: Modalità Dump

La modalità Dump è più o meno l’opzione di backup “legacy” che è ancora rilevante in casi specifici. Si basa sui file di registro che vengono creati nel processo di esistenza del database MySQL, e questi registri vengono utilizzati dal sistema di ripristino point-in-time per eseguire varie operazioni con i suoi dati, come la replica, la protezione e così via.

Il metodo di backup predefinito consiste nell’eseguire il dump di ciascuno dei database separatamente, il che significa che i dati non saranno completamente coerenti se ripristina diversi database di cui è stato eseguito il backup in periodi di tempo diversi e che non hanno alcuna coerenza tra loro. Questo è un problema significativo se si lavora con più database contemporaneamente, e la soluzione di Bacula consiste nel salvare i file di registro generati durante ciascuno dei processi di backup e poi riprodurre questi file per assicurarsi che tutti i database siano globalmente coerenti tra loro.

Esiste anche un’altra soluzione al problema, più globale: l’opzione all_databases. Consente di eseguire il dump di tutti i database in una sola volta, in modo da essere sicuri che i database siano coerenti e da poter eseguire più backup incrementali dopo questo backup completo senza temere l’inconsistenza globale.

Esiste un elenco specifico di file che l’agente MySQL genera nel catalogo Bacula per un singolo “test” del suo database. Può vedere queste voci di file e il loro scopo nella tabella sottostante.

Nome del file Apparecchio Descrizione
global-grants.sql global Un elenco unificato che specifica tutti gli utenti, le loro password e altri dati specifici.
createdb.sql database Script sulla creazione del database
grants.sql database A list that specifies every user that is associated with this database
data.sql database I dati del suo database in formato dump
settings.txt global Variabili attuali del server MySQL
schema.sql database Script sulla creazione dello schema del database
my.cnf global Dati di configurazione del server per MySQL

Modalità di ripristino MySQL

L’agente MySQL di Bacula è in grado di fornire diverse modalità di ripristino, come ad esempio:

  • Ripristino di un singolo database;
  • Ripristino di dump o log binari;
  • Ripristino point-in-time;
  • Ripristino di utenti e ruoli.

Come detto, Bacula Enterprise utilizza gli strumenti di Percona con il suo agente MySQL per ripristinare qualsiasi informazione su un backup in modalità binaria.

Conclusione

Le nuove tecnologie in tutti gli ambienti AII vengono sviluppate costantemente. Per questo motivo, la maggior parte delle aziende trae vantaggio da una soluzione di backup che si innova regolarmente e che garantisce la copertura di tutti i tipi di tecnologie in un reparto IT o in un centro dati, siano esse nuove o vecchie.  Il risultato dell’utilizzo di una soluzione di backup moderna e innovativa è in genere un RTO e un RPO più brevi, una minore manutenzione, costi inferiori e una sicurezza molto più elevata. Bacula Enterprise è un buon esempio di un fornitore di soluzioni di backup di questo tipo.

Informazioni sull'autore
Rob Morrison
Rob Morrison è il direttore marketing di Bacula Systems. Ha iniziato la sua carriera nel marketing IT con Silicon Graphics in Svizzera, ottenendo ottimi risultati in vari ruoli di gestione del marketing per quasi 10 anni. Nei 10 anni successivi, Rob ha ricoperto anche diverse posizioni di gestione del marketing in JBoss, Red Hat e Pentaho, assicurando la crescita della quota di mercato di queste note aziende. Si è laureato all'Università di Plymouth e ha conseguito una laurea ad honorem in Digital Media and Communications e ha completato un programma di studi all'estero.
Lascia un commento

Il suo indirizzo e-mail non sarà pubblicato. I campi obbligatori sono contrassegnati da *