Guest User

Untitled

a guest
Aug 28th, 2018
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.78 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #VARIABILI
  4. mysqldump=$(which mysqldump) #__traccio i percorsi assoluti degli eseguibili
  5. vacuumdb=$(which vacuumdb) #|
  6. pg_dump=$(which pg_dump) #|
  7. find=$(which find) #|
  8. mysqlshow=$(which mysqlshow) #|
  9. logger=$(which logger) #|_fino a qui
  10. today=$(date +%F) #giorno
  11. ora=$(date +%H:%M) #data
  12. path="/root/scripts/" #path dello script comprensiva di trailing slash
  13. bkppath="/opt/backupDB/" #path della cartella dove effettuare backup e logging comprensiva di trailing slash
  14. logtag="[BKPDB]" #Imposto il tag iniziale del log una volta per tutte
  15. admin="root" #L'utente amministratore o adibito ai backups. Non su tutti i sistemi è uguale
  16. host="localhost" #L'indirizzo dell'host. Di default è localhost
  17. mailaddr=foo@b.ar
  18. mysqluser=root
  19. mysqlpassword=AQ_7O4nooeI
  20. pgsqluser=
  21. pgsqlpassword=
  22. #ATTENZIONE: alcune variabili fondamentali sono definite nel file di configurazione
  23. #+che si trova in ${path} in path e che di default è nominato bkpdb.config
  24. #Todo: logger sembra ignorare l'istruzione di loggare in un file specifico, loggando
  25. #+quindi tutto in /var/log/messages; questo non è grave, in quanto con il [TAG] è
  26. #+facile risalire ai log di questo script, però da alquanto fastidio. Vabè...
  27.  
  28. #Controllo che il file di configurazione esista
  29. if [ ! -f ${path}bkpdb.conf ]
  30. then
  31. ${logger} -t ${logtag} 'FAIL! Manca il file di configurazione...fatto qualche cazzata?'
  32. mail -s "Errore backup database" $mailaddr <<EOT
  33. Su questo sistema qualcosa è andato male nel backup dei database. Controlla il syslog (con grep $logtag)
  34. EOT
  35. exit 1;
  36. fi
  37.  
  38. #Controllo che lo script abbia i permessi giusti e sia di proprietà di root:root, altrimenti mi sta sul culo.
  39. #+Questo controllo non è fondamentale, ma fa si che se qualcuno modifica i permessi per qualche motivo
  40. #+se ne accorga perché qualcosa si rompe... magari leggendo il log.
  41. 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}" ]
  42. then
  43. ${logger} -t ${logtag} 'FAIL! Lo script non ha i giusti permessi. Impostali a 700 per poter eseguire lo script'
  44. mail -s "Errore backup database" $mailaddr <<EOT
  45. Su questo sistema qualcosa è andato male nel backup dei database. Controlla il syslog (con grep $logtag)
  46. EOT
  47. exit 1;
  48. fi
  49.  
  50. #INCLUDO il conf
  51. source ${path}bkpdb.conf
  52.  
  53. #START HERE
  54.  
  55. if [[ ${dbarray_mysql[0]} == 'all' ]]; then
  56. #ad ora in questo caso gestisco solo i DB MySQL
  57. allDbs=`${mysqlshow} -h ${host} -u ${mysqluser} -p${mysqlpassword} | head -n -1 | tail -n +4 | cut -d " " -f 2`
  58.  
  59. for db in $allDbs
  60. do
  61. if [[ $1 == '--daily' ]]; then
  62. ${mysqldump} --lock-tables --single-transaction -h ${host} -u ${mysqluser} -p${mysqlpassword} ${db} | gzip > ${bkppath}${db}.${today}.sql.gz
  63. ${logger} -t ${logtag} Backup eseguito per il database MYSQL: ${db}
  64. elif [[ $1 == '--monthly' ]]; then
  65. ${mysqldump} --lock-tables --single-transaction -h ${host} -u ${mysqluser} -p${mysqlpassword} ${db} | gzip > ${bkppath}${db}.monthly.${today}.sql.gz
  66. ${logger} -t ${logtag} Backup MENSILE eseguito per il database MYSQL: ${db}
  67. fi
  68. done
  69.  
  70. else
  71.  
  72. #MYSQL
  73. #Leggo la lista dei database source-ata in precedenza ed eseguo il backup
  74. #+di ognuno comprimendolo
  75. for db in `echo ${dbarray_mysql[*]:0}`
  76. do
  77. if [[ $1 == '--daily' ]]; then
  78. ${mysqldump} --lock-tables --single-transaction -h ${host} -u ${mysqluser} -p${mysqlpassword} ${db} | gzip > ${bkppath}${db}.${today}.sql.gz
  79. ${logger} -t ${logtag} Backup eseguito per il database MYSQL: ${db}
  80. elif [[ $1 == '--monthly' ]]; then
  81. ${mysqldump} --lock-tables --single-transaction -h ${host} -u ${mysqluser} -p${mysqlpassword} ${db} | gzip > ${bkppath}${db}.monthly.${today}.sql.gz
  82. ${logger} -t ${logtag} Backup MENSILE eseguito per il database MYSQL: ${db}
  83. fi
  84. done
  85.  
  86. #PGSQL
  87. #Leggo la lista dei database source-ata in precedenza ed eseguo il backup
  88. #+di ognuno comprimendolo
  89. #ToDo: importante! al momento l'utente "progetti_manager" è hardcoded nel codice,
  90. #+ma se servisse fare backup di più DB con permessi ed utenti differenti questo
  91. #+ non è per nulla bene...
  92. for db in ${dbarray_pgsql[*]:0}
  93. do
  94. ${vacuumdb} -z -U ${pgsqluser} ${db} >/dev/null 2>&1
  95. ${pg_dump} -U ${pgsqluser} ${db} | gzip > "${bkppath}postgresql-${db}-${today}.gz"
  96. ${logger} -t ${logtag} Backup e Vacuum effettuati per il database PGSQL: ${db}
  97. done
  98.  
  99. fi
  100.  
  101. #Rintraccio ed elimino file dei backup giornalieri più vecchi di ret giorni
  102. #+nella cartella dei backup
  103. ${find} ${bkppath} -name "*.gz" ! -name "*monthly*" -ctime +${ret} -exec rm -f {} +
  104. #Rintraccio ed elimino file dei backup mensili più vecchi di mret giorni
  105. #+nella cartella dei backup
  106. ${find} ${bkppath} -name "*.gz" -name "*monthly*" -ctime +${mret} -exec rm -f {} +
Add Comment
Please, Sign In to add comment