Backup di MySQL tramite script: differenze tra le versioni
(→Lo script: fix sintassi) |
|||
(29 versioni intermedie di 8 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<sup>[[#Collegamenti esterni| [1]]]</sup> presente su cyberciti.biz<sup>[[#Collegamenti esterni| [2]]]</sup>) 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 presente su | |||
<pre> | <pre> | ||
MyUSER="utente_MySQL" # USERNAME | MyUSER="utente_MySQL" # USERNAME | ||
Riga 13: | Riga 12: | ||
IGGY="test" | IGGY="test" | ||
</pre> | </pre> | ||
La variabile < | La variabile <code>'''DEST'''</code> permette di impostare la directory di destinazione del backup. I database saranno salvati all'interno di una sottodirectory chiamata <code>mysql</code>.<br/> | ||
La variabile < | La variabile <code>'''IGGY'''</code> permette di indicare quali database devono essere esclusi dal processo di backup. | ||
=Lo script= | == Lo script == | ||
<pre> | <pre> | ||
#!/bin/bash | #!/bin/bash | ||
Riga 28: | 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 | ||
# ------------------------------------------------------------------------- | # ------------------------------------------------------------------------- | ||
# This script is part of nixCraft shell script collection (NSSC) | # This script is part of nixCraft shell script collection (NSSC) | ||
Riga 35: | Riga 33: | ||
MyUSER="utente_MySQL" # USERNAME | MyUSER="utente_MySQL" # USERNAME | ||
MyPASS="Password_Utente | MyPASS="Password_Utente" # PASSWORD | ||
MyHOST="localhost" # Hostname | MyHOST="localhost" # Hostname | ||
Riga 94: | Riga 92: | ||
done | done | ||
</pre> | </pre> | ||
=Esecuzione automatica dello script= | 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: | ||
L'inserimento di questo script in una voce del vostro crontab (si veda ad esempio: | <pre> | ||
find /backup/mysql -type f -mtime +7 -exec rm {} \; | |||
</pre> | |||
== Esecuzione automatica dello script == | |||
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 == | |||
Quello che segue è uno script alternativo, suggerito dall'utente '''mm-barabba''' di debianizzati.org. | |||
<pre> | |||
# 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 | |||
</pre> | |||
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 [[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. | |||
=Backup manuale= | <!-- Nascondo 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. | |||
<pre> | |||
#!/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 | |||
</pre> | |||
--> | |||
== Backup manuale == | |||
Nel caso si volesse effettuare un backup manuale di uno specifico database, è possibile utilizzare il comando: | Nel caso si volesse effettuare un backup manuale di uno specifico database, è possibile utilizzare il comando: | ||
<pre> | <pre> | ||
# mysqldump --opt -u [user_name] -p [database_name] > [backup_file].dump | # mysqldump --opt -u [user_name] -p [database_name] > [backup_file].dump | ||
</pre> | </pre> | ||
Per esportare tutti i database del server: | |||
<pre> | |||
# mysqldump -u root -p -all-databases > dump.sql | |||
</pre> | |||
Per esportare solo la struttura di un database: | |||
<pre> | |||
# mysqldump -u root -p -no-data nome_database > dump.sql | |||
</pre> | |||
Per esportare solo i dati di un database: | |||
<pre> | |||
# mysqldump -u root -p –no-create-info nome_database > dump.sql | |||
</pre> | |||
== Ripristino del database == | |||
Il ripristino potrà essere effettuato con il comando: | Il ripristino potrà essere effettuato con il comando: | ||
<pre> | <pre> | ||
# mysql [database_name] < [backup_file].dump | # mysql -u [username] -p [database_name] < [backup_file].dump | ||
</pre> | |||
Oppure con la sequenza: | |||
<pre> | |||
# mysql -u root -p | |||
Enter Password | |||
mysql> use database_name | |||
Database changed | |||
mysql> source [backup_file].dump | |||
</pre> | </pre> | ||
=Per approfondimenti= | |||
== Per approfondimenti == | |||
[[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5]]<br> | [[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5]]<br> | ||
[[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> | ||
<br/> | |||
: [[Utente:Ferdybassi|Ferdybassi]] | == Collegamenti esterni == | ||
-- | [1] [http://bash.cyberciti.biz/backup/backup-mysql-database-server-2/ script originale]<br/> | ||
[[Categoria: | [2] [http://bash.cyberciti.biz/ bash.cybercity.biz] | ||
[[Categoria: | |||
{{Autori | |||
|Autore = [[Utente:Ferdybassi|Ferdybassi]] | |||
|Estesa_da = | |||
: [[Utente:Mm-barabba|Mm-barabba]] | |||
}} | |||
[[Categoria:Bash Scripting]] | |||
[[Categoria:Database server]] | |||
[[Categoria:Backup&restore]] |
Versione attuale delle 18:14, 26 mar 2023
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 | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |