Guest User

Untitled

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