Panoramica
Questo articolo descrive uno script di backup del database MySQL che consente di implementare un backup automatico giornaliero (o più frequente) con data e compressione dei database MySQL. Il vantaggio dell'utilizzo di questo script è che eseguirà il backup di tutti i database, li memorizzerà in una directory (/data/db-backups) e registrerà la propria attività in un file in (/logs/db-backup) per il controllo e la revisione nel caso di eventuali problemi.
Idealmente, lo script deve essere automatizzato utilizzando CRON in modo che almeno ogni giorno si verifichi un backup completo di ciascun database. Ciò ti consentirà di avere un certo grado di recuperabilità in caso di errori nel tuo database o di facilitare la migrazione dei tuoi database su un altro sistema. Come tutti i processi automatizzati, una volta installato dovrebbe continuare per sempre a fare backup, quindi dovrai assicurarti che i vecchi backup vengano rimossi in modo che i tuoi dischi non si riempiano.
Il copione
Lo script è un semplice script di shell BASH pulito testato su CentOS Linux Distribution ma in grado di essere eseguito su altre varianti di Linux con modifiche minime o nulle.
- Taglia e incolla il seguente testo in un editor e apporta le modifiche necessarie per migliorare o ridurre la funzionalità.
#!/bin/bash # mysql-backup.sh # use mysqldump to Dump DB and compress it on the fly to a mounted partition # BACKUP_DIR="/data/db-backups" mkdir -p $BACKUP_DIR chmod 777 $BACKUP_DIR # # SERIAL="`date +%Y%m%d-%H%M%S`" #===================================== # Log Functions # function LogStart { echo "====== Log Start =========" >> $LF echo "Time: `date`" >> $LF echo " " >> $LF } function LogEnd { echo " " >> $LF echo "Time: `date`" >> $LF echo "====== Log End =========" >> $LF } #===================================== # # function GetDBList { echo "Calling GetDBList()" >> $LF mysqlshow |grep "|"| tr -d ' '|tr -d '|'| egrep -v Databases > $DBLIST } #===================================== # # function DoBackup { echo "Calling DoBackup()" >> $LF DBFILE=$BACKUP_DIR/db-$DB-$SERIAL.sql echo "Host [$H]" >> $LF echo "DB File [$DBFILE]" >> $LF if [ -a $DBFILE ] then mv $DBFILE $DBFILE.`date '+%M%S'` fi echo "Dumping ${DB}" >> $LF mysqldump -B ${DB} --add-drop-database --add-drop-table >> ${DBFILE} echo "Zipping up file!" >> $LF gzip ${DBFILE} echo "Done!" >> $LF } FILE_DATE=`date '+%Y-%m-%d'` LF_DIR=/logs/db-backup LF=$LF_DIR/db-backup-$FILE_DATE.log mkdir -p $LF_DIR chmod 777 $LF_DIR touch $LF chmod 664 $LF DBLIST=/tmp/dblist-$FILE_DATE.list LogStart #===================================== # # MAIN Code Start GetDBList while read line do echo "Backuping up: $line" H="localhost" DB=$line DoBackup done < $DBLIST echo "All backups Completed" >> $LF LogEnd # # EOF
Test del backup
- Per verificare che lo script di backup funzioni, eseguire prima il comando di backup come segue:
/usr/local/bin/mysql-backups.sh
- Quindi, esegui un elenco di directory di /data/db-backup directory creata dallo script, dovresti vedere alcuni file, ognuno dei quali rappresenta il tuo database compresso di cui è stato eseguito il backup!
[root@yourserver]#ls -l /data/db-backups -rw-r--r-- 1 root root 510 Mar 5 15:21 db-information_schema-20140305-152103.sql.gz -rw-r--r-- 1 root root 526 Mar 5 15:22 db-information_schema-20140305-152229.sql.gz -rw-r--r-- 1 root root 142122 Mar 5 15:21 db-mysql-20140305-152103.sql.gz -rw-r--r-- 1 root root 142283 Mar 5 15:22 db-mysql-20140305-152229.sql.gz .... [root@yourserver]#
Automatizzazione dello script
Lo script dovrebbe essere posizionato in una directory chiamata /usr/local/bin . Questa directory è specificatamente riservata agli script applicabili al sistema scritti dall'utente.
Lo script deve essere reso eseguibile dall'utente root, utilizzare il seguente comando per contrassegnare il file come eseguibile:
"chmod 744 /usr/local/bin/mysql-backup.sh"
Per automatizzare l'esecuzione dello script utilizzeremo l'applicazione CRON, quindi aggiungeremo una riga al nostro crontab utilizzando il comando "crontab -e" , verrà visualizzato un editor e aggiungeremo una riga a quanto segue:
30 22 * * * /usr/local/bin/mysql-backups.sh > /dev/null 2>&1
Fondamentalmente questo consentirà allo script di essere eseguito ogni giorno alle 22:30. Nasconderà anche qualsiasi output dal programma mentre il programma si registra su disco.
Recupero
Per recuperare un backup, usa gunzip per decomprimere il file, quindi usa mysql
Ecco un tipico esempio di ciò che è necessario eseguire:
Attenzione:fai molta attenzione a ciò che stai facendo poiché, se commetti un errore, sovrascriverai il tuo database.
Se stai eseguendo il backup del tuo server, considera la possibilità di copiare automaticamente i file su un altro server e di ripristinarli automaticamente, questo ti consente di avere una copia di produzione di database selezionati per scopi di test e controllo interni.
cd /data/db-backups
gunzip db-mybigdatabase-20140305-152229.sql.gz
mysql < db-mybigdatabase-20140305-152229.sql
Dove andiamo da qui?