Backup di MySQL tramite script
Versioni Compatibili Tutte le versioni supportate di Debian |
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