Backup di MySQL tramite script: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(Aggiunto template autori)
(→‎Lo script: fix sintassi)
 
(15 versioni intermedie di 6 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili|Squeeze|Wheezy|Jessie|Stretch}}
== Introduzione ==
== 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:
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<sup>[[#Collegamenti esterni| [1]]]</sup> presente su cyberciti.biz<sup>[[#Collegamenti esterni| [2]]]</sup>) permette la personalizzazione attraverso i parametri:
<pre>
<pre>
MyUSER="utente_MySQL"    # USERNAME
MyUSER="utente_MySQL"    # USERNAME
Riga 27: Riga 27:
# This is a free shell script under GNU GPL version 2.0 or above
# This is a free shell script under GNU GPL version 2.0 or above
# Copyright (C) 2004, 2005 nixCraft project
# Copyright (C) 2004, 2005 nixCraft project
# Feedback/comment/suggestions : http://cyberciti.biz/fb/
# -------------------------------------------------------------------------
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# This script is part of nixCraft shell script collection (NSSC)
Riga 34: Riga 33:
   
   
MyUSER="utente_MySQL"    # USERNAME
MyUSER="utente_MySQL"    # USERNAME
MyPASS="Password_Utente   # PASSWORD
MyPASS="Password_Utente# PASSWORD
MyHOST="localhost"        # Hostname
MyHOST="localhost"        # Hostname
   
   
Riga 93: Riga 92:
done
done
</pre>
</pre>
Per non intasare il server e eliminare i backup vecchi è possibile mettere in <code>crontab</code> uno script simile al seguente, che cancella i file di backup più vecchi di sette giorni:
<pre>
find /backup/mysql -type f -mtime +7 -exec rm {} \;
</pre>
== Esecuzione automatica dello script ==
== 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.
L'inserimento di questo script in una voce del vostro crontab (si veda ad esempio [[Utilizzo_del_servizio_di_scheduling_Cron| la guida su Cron]]) permette un backup automatizzato dei database di MySQL senza la necessità di interrompere il servizio.


== Uno script alternativo ==
== Uno script alternativo ==
Riga 102: Riga 106:
#!/bin/bash
#!/bin/bash


FILE=/dove/voglio/backuppare/name.sql
FILE=/dove/voglio/backuppare/name_backup
NAME=inserire_utente_sql
NAME=utente_sql
PASS=inserire_password_sql
PASS=password_sql
DB=inserire_nome_DB
DB=nome_DB


echo "Content-type: text/plain"
echo "Content-type: text/plain"
Riga 111: Riga 115:
echo "Tried to export file: "$FILE
echo "Tried to export file: "$FILE


mysqldump --quote-names -u $NAME --password=$PASS $DB > $FILE
#eliminare il commmento a seconda del risultato che si vuole ottenere
#dump non compresso
#mysqldump --quote-names -u $NAME --password=$PASS $DB > $FILE.sql
 
#dump compresso con gzip
#mysqldump --quote-names -u $NAME --password=$PASS $DB| gzip -9 > $FILE.sql.gz


# tar zxvf backupfile.tgz (se compresso)
# sql nomedatabase < backupfile
</pre>
</pre>
Lo script permette il backup del database specificato nella variabile <code>DB</code>.<br/>
Lo script permette il backup del database specificato nella variabile <code>DB</code>.<br/>
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.
L'inserimento di questo script in una voce del vostro crontab (si veda ad esempio [[Utilizzo_del_servizio_di_scheduling_Cron|la guida su Cron]]) permette un backup automatizzato dei database di MySQL senza la necessità di interrompere il servizio.


<!-- Nascondo terzo script
== Un terzo script ==
== 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.
Lo script seguente effettua il backup di tutti i database presenti sul server e imposta una rotazione che conserva gli ultimi 4 backup salvati.
Riga 126: Riga 134:


# Modify the following to suit your environment
# Modify the following to suit your environment
export DB_BACKUP=/home/user/mysql_backup”
export DB_BACKUP="/home/user/mysql_backup"
export DB_USER=”root”
export DB_USER="root"
export DB_PASSWD=***********
export DB_PASSWD="***********"
export DATE=”`date +”%d%b”`”
export DATE="'date +”%d%b"'"
export MYSQL=/usr/bin/mysql”
export MYSQL="/usr/bin/mysql"
export MYSQLDUMP=/usr/bin/mysqldump”
export MYSQLDUMP="/usr/bin/mysqldump"


# Backup part
# Backup part
echo “mySQL_backup”
echo "mySQL_backup"
echo “———————-
echo "———————-"
echo * Rotating backups…”
echo "* Rotating backups…"
rm -rf $DB_BACKUP/04
rm -rf $DB_BACKUP/04
mv $DB_BACKUP/03 $DB_BACKUP/04
mv $DB_BACKUP/03 $DB_BACKUP/04
Riga 143: Riga 151:
mkdir $DB_BACKUP/01
mkdir $DB_BACKUP/01
cd $DB_BACKUP/ && cd $DB_BACKUP/01
cd $DB_BACKUP/ && cd $DB_BACKUP/01
$MYSQL -u $DB_USER –password=$DB_PASSWD -Bse ‘show databases’ |while read m; \
$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
do $MYSQLDUMP -u $DB_USER –password=$DB_PASSWD 'echo $m' > 'echo $m'.sql;done
bzip2 *sql
bzip2 *sql


echo * Creating new backup…”
echo "* Creating new backup…"
echo “Backup done! `date`” > /tmp/my_report.log
echo "Backup done! 'date'" > /tmp/my_report.log


# You can set the script to send you mail when backup it’s finished.
# 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
mail -s "MySql Backup report" you@yourmail.com < /tmp/my_report.log
echo "----------------------"
echo "----------------------"
echo "Done"
echo "Done"
exit 0
exit 0
</pre>
</pre>
-->


== Backup manuale ==
== Backup manuale ==
Riga 194: Riga 203:
[[Backup di MySQL tramite script]]<br>
[[Backup di MySQL tramite script]]<br>
[[Configurare MySQL per accettare connessioni remote]]<br>
[[Configurare MySQL per accettare connessioni remote]]<br>
== Collegamenti esterni ==
[1] [http://bash.cyberciti.biz/backup/backup-mysql-database-server-2/  script originale]<br/>
[2] [http://bash.cyberciti.biz/ bash.cybercity.biz]


{{Autori
{{Autori
|Autore = [[Utente:Ferdybassi|Ferdybassi]]
|Autore = [[Utente:Ferdybassi|Ferdybassi]]
|Estesa_da =
: [[Utente:Mm-barabba|Mm-barabba]]
}}
}}



Versione attuale delle 18:14, 26 mar 2023

Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Debian 8 "jessie"
Debian 9 "stretch"

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 [1] presente su cyberciti.biz [2]) 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
# -------------------------------------------------------------------------
# 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

Per non intasare il server e eliminare i backup vecchi è possibile mettere in crontab uno script simile al seguente, che cancella i file di backup più vecchi di sette giorni:

find /backup/mysql -type f -mtime +7 -exec rm {} \;

Esecuzione automatica dello script

L'inserimento di questo script in una voce del vostro crontab (si veda ad esempio la guida su 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_backup
NAME=utente_sql
PASS=password_sql
DB=nome_DB

echo "Content-type: text/plain"
echo
echo "Tried to export file: "$FILE

#eliminare il commmento a seconda del risultato che si vuole ottenere
#dump non compresso
#mysqldump --quote-names -u $NAME --password=$PASS $DB > $FILE.sql

#dump compresso con gzip
#mysqldump --quote-names -u $NAME --password=$PASS $DB| gzip -9 > $FILE.sql.gz

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 la guida su 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

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

Collegamenti esterni

[1] script originale
[2] bash.cybercity.biz




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

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