Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #VARIABILI
- mysqldump=$(which mysqldump) #__traccio i percorsi assoluti degli eseguibili
- vacuumdb=$(which vacuumdb) #|
- pg_dump=$(which pg_dump) #|
- find=$(which find) #|
- mysqlshow=$(which mysqlshow) #|
- logger=$(which logger) #|_fino a qui
- today=$(date +%F) #giorno
- ora=$(date +%H:%M) #data
- path="/root/scripts/" #path dello script comprensiva di trailing slash
- bkppath="/opt/backupDB/" #path della cartella dove effettuare backup e logging comprensiva di trailing slash
- logtag="[BKPDB]" #Imposto il tag iniziale del log una volta per tutte
- admin="root" #L'utente amministratore o adibito ai backups. Non su tutti i sistemi è uguale
- host="localhost" #L'indirizzo dell'host. Di default è localhost
- mailaddr=foo@b.ar
- mysqluser=root
- mysqlpassword=AQ_7O4nooeI
- pgsqluser=
- pgsqlpassword=
- #ATTENZIONE: alcune variabili fondamentali sono definite nel file di configurazione
- #+che si trova in ${path} in path e che di default è nominato bkpdb.config
- #Todo: logger sembra ignorare l'istruzione di loggare in un file specifico, loggando
- #+quindi tutto in /var/log/messages; questo non è grave, in quanto con il [TAG] è
- #+facile risalire ai log di questo script, però da alquanto fastidio. Vabè...
- #Controllo che il file di configurazione esista
- if [ ! -f ${path}bkpdb.conf ]
- then
- ${logger} -t ${logtag} 'FAIL! Manca il file di configurazione...fatto qualche cazzata?'
- mail -s "Errore backup database" $mailaddr <<EOT
- Su questo sistema qualcosa è andato male nel backup dei database. Controlla il syslog (con grep $logtag)
- EOT
- exit 1;
- fi
- #Controllo che lo script abbia i permessi giusti e sia di proprietà di root:root, altrimenti mi sta sul culo.
- #+Questo controllo non è fondamentale, ma fa si che se qualcuno modifica i permessi per qualche motivo
- #+se ne accorga perché qualcosa si rompe... magari leggendo il log.
- if [ `ls -l ${path}bkpdb.sh | cut -d " " -f1` != "-rwx------" ] || [ `ls -l ${path}bkpdb.sh | cut -d " " -f3` != "${admin}" ] || [ `ls -l ${path}bkpdb.sh | cut -d " " -f4` != "${admin}" ]
- then
- ${logger} -t ${logtag} 'FAIL! Lo script non ha i giusti permessi. Impostali a 700 per poter eseguire lo script'
- mail -s "Errore backup database" $mailaddr <<EOT
- Su questo sistema qualcosa è andato male nel backup dei database. Controlla il syslog (con grep $logtag)
- EOT
- exit 1;
- fi
- #INCLUDO il conf
- source ${path}bkpdb.conf
- #START HERE
- if [[ ${dbarray_mysql[0]} == 'all' ]]; then
- #ad ora in questo caso gestisco solo i DB MySQL
- allDbs=`${mysqlshow} -h ${host} -u ${mysqluser} -p${mysqlpassword} | head -n -1 | tail -n +4 | cut -d " " -f 2`
- for db in $allDbs
- do
- if [[ $1 == '--daily' ]]; then
- ${mysqldump} --lock-tables --single-transaction -h ${host} -u ${mysqluser} -p${mysqlpassword} ${db} | gzip > ${bkppath}${db}.${today}.sql.gz
- ${logger} -t ${logtag} Backup eseguito per il database MYSQL: ${db}
- elif [[ $1 == '--monthly' ]]; then
- ${mysqldump} --lock-tables --single-transaction -h ${host} -u ${mysqluser} -p${mysqlpassword} ${db} | gzip > ${bkppath}${db}.monthly.${today}.sql.gz
- ${logger} -t ${logtag} Backup MENSILE eseguito per il database MYSQL: ${db}
- fi
- done
- else
- #MYSQL
- #Leggo la lista dei database source-ata in precedenza ed eseguo il backup
- #+di ognuno comprimendolo
- for db in `echo ${dbarray_mysql[*]:0}`
- do
- if [[ $1 == '--daily' ]]; then
- ${mysqldump} --lock-tables --single-transaction -h ${host} -u ${mysqluser} -p${mysqlpassword} ${db} | gzip > ${bkppath}${db}.${today}.sql.gz
- ${logger} -t ${logtag} Backup eseguito per il database MYSQL: ${db}
- elif [[ $1 == '--monthly' ]]; then
- ${mysqldump} --lock-tables --single-transaction -h ${host} -u ${mysqluser} -p${mysqlpassword} ${db} | gzip > ${bkppath}${db}.monthly.${today}.sql.gz
- ${logger} -t ${logtag} Backup MENSILE eseguito per il database MYSQL: ${db}
- fi
- done
- #PGSQL
- #Leggo la lista dei database source-ata in precedenza ed eseguo il backup
- #+di ognuno comprimendolo
- #ToDo: importante! al momento l'utente "progetti_manager" è hardcoded nel codice,
- #+ma se servisse fare backup di più DB con permessi ed utenti differenti questo
- #+ non è per nulla bene...
- for db in ${dbarray_pgsql[*]:0}
- do
- ${vacuumdb} -z -U ${pgsqluser} ${db} >/dev/null 2>&1
- ${pg_dump} -U ${pgsqluser} ${db} | gzip > "${bkppath}postgresql-${db}-${today}.gz"
- ${logger} -t ${logtag} Backup e Vacuum effettuati per il database PGSQL: ${db}
- done
- fi
- #Rintraccio ed elimino file dei backup giornalieri più vecchi di ret giorni
- #+nella cartella dei backup
- ${find} ${bkppath} -name "*.gz" ! -name "*monthly*" -ctime +${ret} -exec rm -f {} +
- #Rintraccio ed elimino file dei backup mensili più vecchi di mret giorni
- #+nella cartella dei backup
- ${find} ${bkppath} -name "*.gz" -name "*monthly*" -ctime +${mret} -exec rm -f {} +
Add Comment
Please, Sign In to add comment