GNU/Linux >> Linux Esercitazione >  >> Linux

Backup di database MySQL con script

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.

  1. 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

  1. Per verificare che lo script di backup funzioni, eseguire prima il comando di backup come segue:
    /usr/local/bin/mysql-backups.sh
  2. 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:

cd /data/db-backups
gunzip db-mybigdatabase-20140305-152229.sql.gz
mysql < db-mybigdatabase-20140305-152229.sql

Attenzione:fai molta attenzione a ciò che stai facendo poiché, se commetti un errore, sovrascriverai il tuo database.

Dove andiamo da qui?

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.


Linux
  1. Come copiare un database MySQL

  2. Migliora la memorizzazione nella cache del database MySQL

  3. Configura i backup del database MSSQL

  4. Connettiti a un database MySQL da remoto

  5. Importa un database MySQL

PHP MySQL Seleziona dati

Elenca le tabelle in un database MySQL

Come eseguire il backup del database di WordPress tramite MySQL

Server database MySQL

Come creare un database in MySQL

Panoramica di MySQL