Backup di MySQL tramite script

Da Guide@Debianizzati.Org.
Versione del 27 set 2012 alle 11:24 di People (discussione | contributi) (Aggiunto template autori)
Vai alla navigazione Vai alla ricerca
Debian-swirl.png 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

Per esportare tutti i database del server:

# mysqldump -u root -p -all-databases > dump.sql

Per esportare solo la struttura di un database:

# mysqldump -u root -p -no-data  nome_database > dump.sql

Per esportare solo i dati di un database:

# mysqldump -u root -p –no-create-info  nome_database > dump.sql

Ripristino del database

Il ripristino potrà essere effettuato con il comando:

# mysql -u [username] -p [database_name] < [backup_file].dump

Oppure con la sequenza:

# mysql -u root -p
Enter Password
mysql> use database_name
Database changed
mysql> source [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




Guida scritta da: Ferdybassi Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized