Backup di MySQL tramite script
Da Guide@Debianizzati.Org.
Tutte le versioni supportate di Debian |
Indice |
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
Esecuzione automatica dello script
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.
Uno script alternativo
Quello che segue è uno script alternativo, suggerito dall'utente mm-barabba di debianizzati.org.
# Back Up Mysql Database phproject By oTTo #!/bin/bash FILE=/dove/voglio/backuppare/name.sql NAME=inserire_utente_sql PASS=inserire_password_sql DB=inserire_nome_DB echo "Content-type: text/plain" echo echo "Tried to export file: "$FILE mysqldump --quote-names -u $NAME --password=$PASS $DB > $FILE # tar zxvf backupfile.tgz (se compresso) # sql nomedatabase < backupfile
Lo script permette il backup del database specificato nella variabile DB.
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.
Un terzo script
Lo script seguente effettua il backup di tutti i database presenti sul server e imposta una rotazione che conserva gli ultimi 4 backup salvati.
#!/bin/bash #Simple mySQL backup script for cron – updated version # Modify the following to suit your environment export DB_BACKUP=”/home/user/mysql_backup” export DB_USER=”root” export DB_PASSWD=”***********” export DATE=”`date +”%d%b”`” export MYSQL=”/usr/bin/mysql” export MYSQLDUMP=”/usr/bin/mysqldump” # Backup part echo “mySQL_backup” echo “———————-” echo “* Rotating backups…” rm -rf $DB_BACKUP/04 mv $DB_BACKUP/03 $DB_BACKUP/04 mv $DB_BACKUP/02 $DB_BACKUP/03 mv $DB_BACKUP/01 $DB_BACKUP/02 mkdir $DB_BACKUP/01 cd $DB_BACKUP/ && cd $DB_BACKUP/01 $MYSQL -u $DB_USER –password=$DB_PASSWD -Bse ‘show databases’ |while read m; \ do $MYSQLDUMP -u $DB_USER –password=$DB_PASSWD `echo $m` > `echo $m`.sql;done bzip2 *sql echo “* Creating new backup…” echo “Backup done! `date`” > /tmp/my_report.log # You can set the script to send you mail when backup it’s finished. mail -s “MySql Backup report” you@yourmail.com < /tmp/my_report.log echo "----------------------" echo "Done" exit 0
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
Ripristino del database
Il ripristino potrà essere effettuato con il comando:
# mysql -u [username] -p [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