Backup di MySQL tramite script

Debian-swirl.png Versioni Compatibili

ERRORE: valore non valido ( Debian Sarge 3.0
Debian Etch 4.0
Debian Lenny 5.0
Debian Squeeze
Debian Sid )! Vedi qui.

Effettuare un backup dei database MySQL tramite uno script Bash

Introduzione

Attraverso lo script riportato di seguito è possibile effettuare il backup di tutti i database presenti nella nostra installazione di MySQL. Lo script (basato sull'originale presente su: http://bash.cyberciti.biz/) permette la personalizzazione attraverso i parametri:

MyUSER="utente_MySQL"     # USERNAME
MyPASS="Password_Utente   # PASSWORD
MyHOST="localhost"        # Hostname

che vanno compilati con i dati per accedere al nostro server MySQL, e:

DEST="/backup"
IGGY="test"

La variabile DEST permette di impostare la directory di destinazione del backup. I database saranno salvati all'interno di una sottodirectory chiamata mysql.
La variabile IGGY permette di indicare quali database devono essere esclusi dal processo di backup.

Lo script

#!/bin/bash
# Shell script to backup MySql database
# To backup Nysql databases file to /backup dir and later pick up by your
# script. You can skip few databases from backup too.
# For more info please see (Installation info):
# http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/01/mysql-backup-script.html
# Last updated: Aug - 2005
# --------------------------------------------------------------------
# This is a free shell script under GNU GPL version 2.0 or above
# Copyright (C) 2004, 2005 nixCraft project
# Feedback/comment/suggestions : http://cyberciti.biz/fb/
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# -------------------------------------------------------------------------
 
MyUSER="utente_MySQL"     # USERNAME
MyPASS="Password_Utente   # PASSWORD
MyHOST="localhost"        # Hostname
 
# Linux bin paths, change this if it can't be autodetected via which command
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"
 
# Backup Dest directory, change this if you have someother location
DEST="/backup"
 
# Main directory where backup will be stored
MBD="$DEST/mysql"
 
# Get hostname
HOST="$(hostname)"
 
# Get data in dd-mm-yyyy format
NOW="$(date +"%d-%m-%Y")"
 
# File to store current backup file
FILE=""
# Store list of databases
DBS=""
 
# DO NOT BACKUP these databases
IGGY="test"
 
[ ! -d $MBD ] && mkdir -p $MBD || :
 
# Only root can access it!
$CHOWN 0.0 -R $DEST
$CHMOD 0600 $DEST
 
# Get all database list first
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
 
for db in $DBS
do
    skipdb=-1
    if [ "$IGGY" != "" ];
    then
	for i in $IGGY
	do
	    [ "$db" == "$i" ] && skipdb=1 || :
	done
    fi
 
    if [ "$skipdb" == "-1" ] ; then
	FILE="$MBD/$db.$HOST.$NOW.gz"
	# do all inone job in pipe,
	# connect to mysql using mysqldump for select mysql database
	# and pipe it out to gz file in backup dir :)
        $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
    fi
done

L'inserimento di questo script in una voce del vostro crontab (si veda ad esempio: http://guide.debianizzati.org/index.php/Utilizzo_del_servizio_di_scheduling_Cron) permette un backup automatizzato dei database di MySQL senza la necessità di interrompere il servizio.

Backup manuale

Nel caso si volesse effettuare un backup manuale di uno specifico database, è possibile utilizzare il comando:

# mysqldump --opt -u [user_name] -p [database_name] > [backup_file].dump

Il ripristino potrà essere effettuato con il comando:

# mysql [database_name] < [backup_file].dump

Per approfondimenti

Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5
Backup di MySQL tramite script
Configurare MySQL per accettare connessioni remote

Ferdybassi