Script to Backup MySQL databases


/ Published in: Bash
Save to your folder(s)



Copy this code and paste it in your HTML
  1. #!/bin/bash
  2. #
  3. # Saibal MySQL Backup Script
  4. #
  5. # VER. 1.1 - http://www.lorenzone.it
  6. # Copyright (c) 2010 [email protected]
  7. #
  8. # BY IDEA OF DAVIDE BUZZI'S SCRIPT. THANK YOU BROTHER!
  9. # THANK YOU TO MR. GLAUCO TOO!
  10. #
  11. # This program is free software; you can redistribute it and/or modify
  12. # it under the terms of the GNU General Public License as published by
  13. # the Free Software Foundation; either version 2 of the License, or
  14. # (at your option) any later version.
  15. #
  16. # This program is distributed in the hope that it will be useful,
  17. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19. # GNU General Public License for more details.
  20. #
  21. # You should have received a copy of the GNU General Public License
  22. # along with this program; if not, write to the Free Software
  23. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  24. #
  25. #=====================================================================
  26.  
  27. #=====================================================================
  28. # CHANGELOG
  29. #=====================================================================
  30. # Versione 1.1
  31. # Separazione funzioni dump e compressione
  32. # Aggiunti controlli sulla creazione delle cartelle e dei file
  33. # Sostituzione funzione touch con echo -e per la creazione del file di log
  34. # Sostituzione del comando LET per le operazioni di incremento contatori
  35. # Rivisitazione generale del codice
  36.  
  37. # Versione 1.0
  38. # Aggiunto invio log per email
  39. # Aggiunto trasferimento FTP
  40. # Controllo generale del codice
  41. #
  42. # Versione 0.5
  43. # Aggiunto backup giornaliero
  44. # Aggiunto backup mensile
  45. # Aggiunta registrazione dei log
  46.  
  47. #=====================================================================
  48. # TO REMEMBER
  49. #=====================================================================
  50. #
  51. # 1) nelle operazioni per aumentare i contatori potrei usare il comando "let". Es.: 'let CONTA++' aumenta di 1 il contatore
  52. # Si però tratta di un "bashismo" che non mi assicura la compatibilità su altre shell.
  53. # Per questo motivo utilizzo l'espasione classica. Es.: CONTA=$(( CONTA + 1 )).
  54. # 2) Per creare un file potrei usare "touch" ma per avere un corretto return-code ($?) se esiste una dir
  55. # con lo stesso nome uso 'echo -n'. il parametro -n non inserisce una riga vuota nel nuovo file creato
  56.  
  57. #=====================================================================
  58. # Configurazione generale
  59. #=====================================================================
  60. # host database
  61. DBHOST='localhost'
  62.  
  63. # username database
  64. USERNAME='root'
  65.  
  66. # password database
  67. PASSWORD=''
  68.  
  69. # lista dei database da salvare (separati da spazio)
  70. DATABASES='mysql'
  71.  
  72. # directory dove salvare i backup (senza slash finale)
  73. OUT_DIR='/home/UTENTE/bk_database'
  74.  
  75. # formato data (it oppure en)
  76. DATE_FORMAT='it'
  77.  
  78. # backup mensile? (y oppure n)
  79. MONTHLY_BACKUP='y'
  80.  
  81. # giorno del mese in cui effettuare il backup mensile (formato 01, 02, 03, etc)
  82. MONTHLY_BKDAY='01'
  83.  
  84. # cartella backup giornalieri
  85. DAILY_FOLDER='daily'
  86.  
  87. # cartella backup mensili
  88. MONTHLY_FOLDER='monthly'
  89.  
  90. # cartella ultimo backup
  91. LAST_FOLDER='last'
  92.  
  93. #=====================================================================
  94. # Configurazione logs
  95. #=====================================================================
  96. # registrazione dei log? (y oppure n)
  97. LOGS_REC='y'
  98.  
  99. # directory dove salvare i LOG. Se lasciata vuota sarà la stessa dei backup (senza slash finale)
  100. LOGS_DIR=''
  101.  
  102. # cartella dei LOG
  103. LOGS_FOLDER='dumplog'
  104.  
  105. # nome del file di LOG
  106. LOGS_FILENAME='dump.log'
  107.  
  108. # dimensione massima del file di log (in KB)
  109. LOGS_MAXSIZE='900'
  110.  
  111. #=====================================================================
  112. # Configurazione invio email
  113. #=====================================================================
  114. # abilitare invio email con risultato delle operazioni? (y oppure n)
  115. EMAIL_SEND='n'
  116.  
  117. # inviare email solo in caso di errore? (y oppure n)
  118. EMAIL_ONLYERRORS='y'
  119.  
  120. # programma da utilizzare
  121. EMAIL_SERVICE='sendmail'
  122.  
  123. # destinatario email
  124. EMAIL_RECIVER='[email protected]'
  125.  
  126. # soggetto email
  127. EMAIL_SUBJECT='MySQL Backup - resoconto'
  128.  
  129. #=====================================================================
  130. # Configurazione ftp
  131. #=====================================================================
  132. # abilitare trasferimento FTP dei backup? (y oppure n)
  133. FTP_TRANSF='n'
  134.  
  135. # trasferire backup giornalieri o solo i last? (d oppure l)
  136. FTP_FILES='d'
  137.  
  138. # indirizzo FTP
  139. FTP_HOST='123.123.123.123'
  140.  
  141. # username FTP
  142. FTP_USER='xx'
  143.  
  144. # password FTP
  145. FTP_PASSWORD='xx'
  146.  
  147. # directory in cui inserire i file
  148. FTP_REMOTEDIR='/public_html/bk_db'
  149.  
  150. # file temp. per il log dei comandi di console FTP. Il risultato dell'operazione viene invece registrato sul file generale
  151. FTP_LOGS_FILENAME='ftp.log'
  152.  
  153. #=====================================================================
  154. # Configurazione messaggi
  155. #=====================================================================
  156. # messaggi di ritorno per il backup (NOMEDB è un placeholder. se possibile non cancellare)
  157. BACKUP_OK="BACKUP RIUSCITO! | $HOSTNAME | Tutti i backup effettuati con successo"
  158. BACKUP_KO="ERRORE BACKUP! | $HOSTNAME | I seguenti database: NOMEDB non sono stati copiati e/o compressi"
  159. CONNEC_KO="ERRORE MYSQL! | $HOSTNAME | Impossibile connettersi ai seguenti database: NOMEDB"
  160. SEMAIL_KO="ERRORE INVIO! | $HOSTNAME | Impossibile trovare il servizio $EMAIL_SERVICE per inviare messaggi"
  161. FTPPUT_OK="FTP RIUSCITO! | $HOSTNAME | Tutti i file sono stati trasferiti con successo sul server $FTP_HOST"
  162. FTPPUT_KO="ERRORE FTP! | $HOSTNAME | Errore procedura FTP. Errore: FTPERR"
  163.  
  164. ########################################
  165. # START CODE - BE CAREFUL WHEN EDITING
  166. ########################################
  167.  
  168. #=========================================
  169. # FUNZIONI VARIE
  170. #=========================================
  171. # funzione per controllare la corretta creazione delle directory e dei file
  172. check_build() {
  173.  
  174. # $1 è il return code dell'operazione precedente ($?) | $2 è il nome della dir che si è tentato di creare
  175. if [ "$1" -eq "1" ]
  176. then
  177. echo "Errore nel creare $2. Controllare che non esista un file/directory con lo stesso nome"
  178. exit
  179. fi
  180. }
  181.  
  182. # funzione per check invio email
  183. check_email() {
  184.  
  185. if [ "$EMAIL_SEND" = "y" ]
  186. then
  187.  
  188. CHECK_MAIL=$(which $EMAIL_SERVICE)
  189.  
  190. if [ -n "$CHECK_MAIL" ]
  191. then
  192. MAIL_RESULT=1
  193. else
  194. MAIL_RESULT=0
  195. # aumento il contatore
  196. ERROR_NOMAIL_SERVICE=$(( ERROR_NOMAIL_SERVICE + 1 ))
  197. fi
  198.  
  199. else
  200. MAIL_RESULT=0
  201. fi
  202.  
  203. return $MAIL_RESULT
  204. }
  205.  
  206. # funzione per check connessione al database
  207. check_connection() {
  208.  
  209. # testo la connessione
  210. mysql --user=$USERNAME --password=$PASSWORD $DB -e STATUS > /dev/null 2>&1
  211.  
  212. # id errore
  213. CONN_ERROR=$?
  214.  
  215. return $CONN_ERROR
  216. }
  217.  
  218. # funzione per effettuare il dump al db
  219. do_mysqldump() {
  220.  
  221. # dump del database
  222. mysqldump --user=$USERNAME --password=$PASSWORD --host=$DBHOST $DB > "$1"
  223.  
  224. # registro il risultato dell'operazione mysqldump.
  225. DUMP_ERROR=$?
  226.  
  227. return $DUMP_ERROR
  228. }
  229.  
  230. # funzione per effettuare la compressione del database
  231. do_compression() {
  232.  
  233. # comprimo il tutto con gzip
  234. gzip -f "$1"
  235.  
  236. #risultato operazione gzip
  237. GZIP_ERROR=$?
  238.  
  239. return $GZIP_ERROR
  240. }
  241.  
  242. #=========================================
  243. # VARIABILI
  244. #=========================================
  245. # path principali del sistema
  246. PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/mysql/bin:/usr/sbin
  247.  
  248. # data di oggi
  249. TODAY_DATE=`date +%d/%m/%Y`
  250.  
  251. # ora di oggi
  252. TODAY_TIME=`date +%T`
  253.  
  254. # giorno della settimana (1 Lunedì, 2 Martedì, etc etc)
  255. NDAY=`date +%u`
  256.  
  257. # giorno del mese (formato 01, 02, 03, etc)
  258. DMON=`date +%d`
  259.  
  260. # mese
  261. MON=`date +%m`
  262.  
  263. # mese - anno
  264. MONYEA=`date +%m_%Y`
  265.  
  266. # date esecuzione backup nei due formati
  267. DATEIT=`date +\[%d-%m-%Y_%H-%M\]`
  268. DATEEN=`date +\[%Y-%m-%d_%H-%M\]`
  269.  
  270. # formato data per i log
  271. LOGDATE="`date +%Y/%m/%d` - `date +%T`"
  272.  
  273. # dichiaro questa variabile perchè il backup mensile è opzionale
  274. LOGS_RESULT_MONTHLY=0
  275.  
  276. # contatori di errori
  277. ERROR_CONN_TODB=0
  278. ERROR_COUNT_DAILY=0
  279. ERROR_COUNT_MONTHLY=0
  280. ERROR_NOMAIL_SERVICE=0
  281. ERROR_FTP_TRANSFER=0
  282.  
  283. # codice per convertire in LOWERCASE le variabili inserite in questo array
  284. TO_LOWER=("DATE_FORMAT" "MONTHLY_BACKUP" "LOGS_REC" "EMAIL_SEND" "EMAIL_ONLYERRORS" "FTP_TRANSF" "FTP_FILES")
  285.  
  286. for INPUT in "${TO_LOWER[@]}"
  287. do
  288. eval $INPUT="$(echo ${!INPUT} | tr 'A-Z' 'a-z')"
  289. done
  290.  
  291. # scelgo la formattazione della data
  292. if [ "$DATE_FORMAT" = "it" ]
  293. then
  294. DATE="$DATEIT"
  295. else
  296. DATE="$DATEEN"
  297. fi
  298.  
  299. # se non esiste la directory OUTDIR la creo
  300. if [ ! -d "$OUT_DIR" ]
  301. then
  302. mkdir -p "$OUT_DIR"
  303. fi
  304. # controllo la creazione della dir
  305. check_build "$?" "$OUT_DIR"
  306.  
  307. # se non esiste la directory DAILY la creo
  308. if [ ! -d "$OUT_DIR/$DAILY_FOLDER" ]
  309. then
  310. mkdir -p "$OUT_DIR/$DAILY_FOLDER"
  311. fi
  312. # controllo la creazione della dir
  313. check_build "$?" "$OUT_DIR/$DAILY_FOLDER"
  314.  
  315. # se non esiste la directory LAST la creo
  316. if [ ! -d "$OUT_DIR/$LAST_FOLDER" ]
  317. then
  318. mkdir -p "$OUT_DIR/$LAST_FOLDER"
  319. fi
  320. # controllo la creazione della dir
  321. check_build "$?" "$OUT_DIR/$LAST_FOLDER"
  322.  
  323. # se non esiste la directory MONTHLY la creo
  324. if [ "$MONTHLY_BACKUP" = "y" ]
  325. then
  326.  
  327. if [ ! -d "$OUT_DIR/$MONTHLY_FOLDER" ]
  328. then
  329. mkdir -p "$OUT_DIR/$MONTHLY_FOLDER"
  330. fi
  331. # controllo la creazione della dir
  332. check_build "$?" "$OUT_DIR/$MONTHLY_FOLDER"
  333. fi
  334.  
  335. # se sono abilitati i logs e non esiste la directory LOGS la creo e calcolo la dimensione massima del file
  336. if [ "$LOGS_REC" = "y" ]
  337. then
  338.  
  339. # se la variabile LOGS_DIR non è vuota la imposto altrimenti inserisco la cartella dentro la directory di default
  340. if [ -n "$LOGS_DIR" ]
  341. then
  342. LOGS_DIR="$LOGS_DIR/$LOGS_FOLDER"
  343. else
  344. LOGS_DIR="$OUT_DIR/$LOGS_FOLDER"
  345. fi
  346.  
  347. # creo la directory
  348. if [ ! -d "$LOGS_DIR" ]
  349. then
  350. mkdir -p "$LOGS_DIR"
  351. fi
  352. # controllo la creazione della dir
  353. check_build "$?" "$LOGS_DIR"
  354.  
  355. # creo il file di log
  356. if [ ! -f "$LOGS_DIR/$LOGS_FILENAME" ]
  357. then
  358. echo -ne > "$LOGS_DIR/$LOGS_FILENAME"
  359. fi
  360. # controllo la creazione del file
  361. check_build "$?" "$LOGS_DIR/$LOGS_FILENAME"
  362.  
  363. # cancello il file log FTP se viene disabilitata la funzione (ma la funzione log generale deve cmq essere attiva!)
  364. if [ "$FTP_TRANSF" != "y" ]
  365. then
  366. rm -f "$LOGS_DIR/$FTP_LOGS_FILENAME"
  367. fi
  368.  
  369. # converto i KB in BYTES dopo aver controllato che la VAR non sia vuota
  370. if [ -n "$LOGS_MAXSIZE" ]
  371. then
  372. LOGS_MAXBYTES=$(( $LOGS_MAXSIZE*1000 ))
  373. else
  374. LOGS_MAXBYTES=$(( 1000*1000 ))
  375. fi
  376. fi
  377.  
  378. #=========================================
  379. # START BACKUP NOW!!!
  380. #=========================================
  381.  
  382. # Controllo l'invio delle email. ritorna $MAIL_RESULT
  383. check_email
  384.  
  385. # inizio il ciclo sui database
  386. for DB in $DATABASES
  387. do
  388.  
  389. # funzione per testare la connessione al database. ritorna $CONN_ERROR
  390. check_connection
  391.  
  392. if [ "$CONN_ERROR" -eq "0" ]
  393. then
  394.  
  395. ########################################
  396. # BACKUP GIORNALIERO
  397. ########################################
  398.  
  399. # rimuovo i vecchi backup (qualsiasi estensione)
  400. rm -f "$OUT_DIR/$DAILY_FOLDER/[${NDAY}]__${DB}__"*
  401.  
  402. # creo il nome del file da dumpare e comprimere in .gz
  403. OUTFILE="$OUT_DIR/$DAILY_FOLDER/[${NDAY}]__${DB}__${DATE}.sql"
  404.  
  405. # ci sbatto dentro il dump. ritorna $DUMP_ERROR
  406. do_mysqldump "$OUTFILE"
  407.  
  408. # comprimo il file. ritorna $GZIP_ERROR
  409. do_compression "$OUTFILE"
  410.  
  411. # se la compressione è avvenuta rimuovo i vecchi file ".last" e copio l'ultimo gzip creato dentro la dir LAST
  412. if [ "$GZIP_ERROR" -eq "0" ]
  413. then
  414.  
  415. rm -f "$OUT_DIR/$LAST_FOLDER/${DB}__"*"__last.sql.gz"
  416.  
  417. # uso la funzione cp
  418. cp "$OUTFILE.gz" "$OUT_DIR/$LAST_FOLDER/${DB}__${DATE}__last.sql.gz"
  419. fi
  420.  
  421. # uso le VAR di ritorno delle funzioni per gestire gli errori nei log se abilitati
  422. if [ "$LOGS_REC" = "y" ]
  423. then
  424.  
  425. if [ "$DUMP_ERROR" -gt "0" -o "$GZIP_ERROR" -gt "0" ]
  426. then
  427.  
  428. # aumento il contatore
  429. ERROR_COUNT_DAILY=$(( ERROR_COUNT_DAILY + 1 ))
  430.  
  431. # registro i DB nella stessa variabile
  432. ERROR_DB+="[${DB}__giornaliero] "
  433. fi
  434. fi
  435.  
  436. ########################################
  437. # BACKUP MENSILE
  438. ########################################
  439. if [ "$MONTHLY_BACKUP" = "y" ]
  440. then
  441.  
  442. if [ "$DMON" = "$MONTHLY_BKDAY" ]
  443. then
  444.  
  445. # rimuovo i vecchi backup
  446. rm -f "$OUT_DIR/$MONTHLY_FOLDER/[${MON}_"*"]__${DB}"*
  447.  
  448. # creo il nome del file da dumpare e comprimere in .gz
  449. OUTFILE="$OUT_DIR/$MONTHLY_FOLDER/[${MONYEA}]__${DB}.sql"
  450.  
  451. # ci sbatto dentro il dump. ritorna $DUMP_ERROR
  452. do_mysqldump "$OUTFILE"
  453.  
  454. # comprimo il file. ritorna $GZIP_ERROR
  455. do_compression "$OUTFILE"
  456.  
  457. # preparo i messaggi di log se abilitati
  458. if [ "$LOGS_REC" = "y" ]
  459. then
  460.  
  461. if [ "$DUMP_ERROR" -gt "0" -o "$GZIP_ERROR" -gt "0" ]
  462. then
  463.  
  464. # aumento il contatore
  465. ERROR_COUNT_MONTHLY=$(( ERROR_COUNT_MONTHLY + 1 ))
  466.  
  467. # registro i DB nella stessa variabile
  468. ERROR_DB+="[${DB}__mensile] "
  469. fi
  470. fi
  471. fi
  472. fi
  473.  
  474. else
  475.  
  476. if [ "$LOGS_REC" = "y" -o "$MAIL_RESULT" -eq "1" ]
  477. then
  478.  
  479. # aumento il contatore
  480. ERROR_CONN_TODB=$(( ERROR_CONN_TODB + 1 ))
  481.  
  482. # registro i DB nella stessa variabile
  483. ERROR_CONN_DB+="[${DB}] "
  484. fi
  485. fi
  486.  
  487. done
  488.  
  489. #=========================================
  490. # FTP SECTION!!!
  491. #=========================================
  492. if [ "$FTP_TRANSF" = "y" -a "$CONN_ERROR" -eq "0" ]
  493. then
  494.  
  495. if [ "$FTP_FILES" = "d" ]
  496. then
  497. FTP_FOLDER="$DAILY_FOLDER"
  498. MFILENAME="*[${NDAY}]*]*.gz"
  499. else
  500. FTP_FOLDER="$LAST_FOLDER"
  501. MFILENAME="*__last*.gz"
  502. fi
  503.  
  504. echo "
  505. open $FTP_HOST
  506. user $FTP_USER $FTP_PASSWORD
  507. binary
  508. lcd $OUT_DIR/$FTP_FOLDER
  509. cd $FTP_REMOTEDIR
  510. mdelete $MFILENAME
  511. mput $MFILENAME
  512. close
  513. quit" | ftp -in -v > "$LOGS_DIR/$FTP_LOGS_FILENAME" 2>&1
  514.  
  515. # visto che le funzioni FTP fanno schifo cerco in qualche maniera di intercettare gli errori
  516. # non connesso
  517. FTP_TRAPERR=`grep -i "Not connected." "$LOGS_DIR/$FTP_LOGS_FILENAME"`
  518. if [ "$?" -eq "0" ]
  519. then
  520. # aumento il contatore
  521. ERROR_FTP_TRANSFER=$(( ERROR_FTP_TRANSFER + 1 ))
  522. ERROR_FTP_RESULT="${ERROR_FTP_RESULT}Connessione al server FTP fallita | "
  523. fi
  524.  
  525. # autenticazione fallita
  526. FTP_TRAPERR=`grep -i "Login authentication failed" "$LOGS_DIR/$FTP_LOGS_FILENAME"`
  527. if [ "$?" -eq "0" ]
  528. then
  529. # aumento il contatore
  530. ERROR_FTP_TRANSFER=$(( ERROR_FTP_TRANSFER + 1 ))
  531. ERROR_FTP_RESULT="${ERROR_FTP_RESULT}Autenticazione fallita | "
  532. fi
  533.  
  534. # directory remota non trovata
  535. FTP_TRAPERR=`grep -i "change directory to $FTP_REMOTEDIR" "$LOGS_DIR/$FTP_LOGS_FILENAME"`
  536. if [ "$?" -eq "0" ]
  537. then
  538. # aumento il contatore
  539. ERROR_FTP_TRANSFER=$(( ERROR_FTP_TRANSFER + 1 ))
  540. ERROR_FTP_RESULT="${ERROR_FTP_RESULT}Directory remota non trovata | "
  541. fi
  542.  
  543. # non trovo i file
  544. FTP_TRAPERR=`grep -i "no such" "$LOGS_DIR/$FTP_LOGS_FILENAME"`
  545. if [ "$?" -eq "0" ]
  546. then
  547. # aumento il contatore
  548. ERROR_FTP_TRANSFER=$(( ERROR_FTP_TRANSFER + 1 ))
  549. ERROR_FTP_RESULT="${ERROR_FTP_RESULT}File o directory non trovati | "
  550. fi
  551.  
  552. # app chiusa
  553. FTP_TRAPERR=`grep -i "killed" "$LOGS_DIR/$FTP_LOGS_FILENAME"`
  554. if [ "$?" -eq "0" ]
  555. then
  556. # aumento il contatore
  557. ERROR_FTP_TRANSFER=$(( ERROR_FTP_TRANSFER + 1 ))
  558. ERROR_FTP_RESULT="${ERROR_FTP_RESULT}Processo di trasferimento abbandonato | "
  559. fi
  560.  
  561. # spazio su disco esaurito (come me!! bwuahbwuah)
  562. FTP_TRAPERR=`grep -i "space" "$LOGS_DIR/$FTP_LOGS_FILENAME"`
  563. if [ "$?" -eq "0" ]
  564. then
  565. # aumento il contatore
  566. ERROR_FTP_TRANSFER=$(( ERROR_FTP_TRANSFER + 1 ))
  567. ERROR_FTP_RESULT="${ERROR_FTP_RESULT}Mancanza di spazio su disco"
  568. fi
  569. fi
  570.  
  571. #=========================================
  572. # MAIL SECTION!!!
  573. #=========================================
  574. if [ "$MAIL_RESULT" -eq "1" ]
  575. then
  576.  
  577. # se viene scelto di ricevere una email anche quando le operazioni sono OK
  578. if [ "$EMAIL_ONLYERRORS" = "n" ]
  579. then
  580.  
  581. # se tutti i dump sono OK invio il messaggio relativo
  582. if [ "$ERROR_CONN_TODB" -eq "0" -a "$ERROR_COUNT_DAILY" -eq "0" -a "$ERROR_COUNT_MONTHLY" -eq "0" ]
  583. then
  584.  
  585. BACKUP_OK="$LOGDATE | $BACKUP_OK"
  586.  
  587. # se è attivo il trasferimento file e non ci sono errori aggiungo una parte di messaggio
  588. if [ "$FTP_TRANSF" = "y" -a "$ERROR_FTP_TRANSFER" -eq "0" ]
  589. then
  590. BACKUP_OK="$BACKUP_OK | $FTPPUT_OK"
  591. fi
  592.  
  593. echo "$BACKUP_OK" | mail -s "$EMAIL_SUBJECT" $EMAIL_RECIVER
  594. fi
  595. fi
  596.  
  597. # invio email errore backup giornaliero o mensile
  598. if [ "$ERROR_COUNT_DAILY" -gt "0" -o "$ERROR_COUNT_MONTHLY" -gt "0" ]
  599. then
  600.  
  601. BACKUP_KO="$LOGDATE | $BACKUP_KO"
  602. BACKUP_KO=${BACKUP_KO//NOMEDB/$ERROR_DB}
  603.  
  604. echo "$CONNEC_KO" | mail -s "$EMAIL_SUBJECT" $EMAIL_RECIVER
  605. fi
  606.  
  607. # invio email errore connessioni al database
  608. if [ "$ERROR_CONN_TODB" -gt "0" ]
  609. then
  610.  
  611. CONNEC_KO="$LOGDATE | $CONNEC_KO"
  612. CONNEC_KO=${CONNEC_KO//NOMEDB/$ERROR_CONN_DB}
  613.  
  614. echo "$CONNEC_KO" | mail -s "$EMAIL_SUBJECT" $EMAIL_RECIVER
  615. fi
  616.  
  617. # invio email errore trasferimento file
  618. if [ "$ERROR_FTP_TRANSFER" -gt "0" ]
  619. then
  620.  
  621. FTPPUT_KO="$LOGDATE | $FTPPUT_KO"
  622. FTPPUT_KO=${FTPPUT_KO//FTPERR/$ERROR_FTP_RESULT}
  623.  
  624. echo "$FTPPUT_KO" | mail -s "$EMAIL_SUBJECT" $EMAIL_RECIVER
  625. fi
  626. fi
  627.  
  628. #=========================================
  629. # LOGS SECTION!!!
  630. #=========================================
  631. if [ "$LOGS_REC" = "y" ]
  632. then
  633.  
  634. echo ======================================================================
  635. echo Saibal MySQL Backup
  636. echo
  637. echo Start time: $TODAY_TIME - $TODAY_DATE
  638. echo Backup of MySQL Databases \(powered by saibal - saibal@lorenzone.it\)
  639. echo ======================================================================
  640. echo Risultato delle operazioni:
  641. echo
  642.  
  643. # dimensione del file per vedere quando troncarlo
  644. LOG_SIZE=$( stat -c %s "$LOGS_DIR/$LOGS_FILENAME")
  645.  
  646. # se la misura attuale è più grande di quella massima tronco il file e ricomincio
  647. if [ $LOG_SIZE -gt "$LOGS_MAXBYTES" ]
  648. then
  649.  
  650. # con il parametro -n non metto una riga vuota nel file
  651. echo -ne > "$LOGS_DIR/$LOGS_FILENAME"
  652. fi
  653.  
  654. # se vengono rilevati errori nel servizio di posta
  655. if [ "$ERROR_NOMAIL_SERVICE" -gt "0" ]
  656. then
  657.  
  658. SEMAIL_KO="$LOGDATE | $SEMAIL_KO"
  659.  
  660. echo "$SEMAIL_KO"
  661. echo "$SEMAIL_KO" >> "$LOGS_DIR/$LOGS_FILENAME"
  662. fi
  663.  
  664. # se c'è un problema FTP stampo il messaggio
  665. if [ "$ERROR_FTP_TRANSFER" -gt "0" ]
  666. then
  667.  
  668. FTPPUT_KO="$LOGDATE | $FTPPUT_KO"
  669. FTPPUT_KO=${FTPPUT_KO//FTPERR/$ERROR_FTP_RESULT}
  670.  
  671. echo "$FTPPUT_KO"
  672. echo "$FTPPUT_KO" >> "$LOGS_DIR/$LOGS_FILENAME"
  673.  
  674. elif [ "$FTP_TRANSF" = "y" -a "$ERROR_FTP_TRANSFER" -eq "0" ]
  675. then
  676.  
  677. FTPPUT_OK="$LOGDATE | $FTPPUT_OK"
  678.  
  679. echo "$FTPPUT_OK"
  680. echo "$FTPPUT_OK" >> "$LOGS_DIR/$LOGS_FILENAME"
  681. fi
  682.  
  683. # se tutti i dump sono OK stampo il messaggio relativo
  684. if [ "$ERROR_CONN_TODB" -eq "0" -a "$ERROR_COUNT_DAILY" -eq "0" -a "$ERROR_COUNT_MONTHLY" -eq "0" ]
  685. then
  686.  
  687. # replace di alcune variabili
  688. BACKUP_OK="$LOGDATE | $BACKUP_OK"
  689.  
  690. echo "$BACKUP_OK"
  691. echo "$BACKUP_OK" >> "$LOGS_DIR/$LOGS_FILENAME"
  692.  
  693. # se i dump (mensile e/o giornaliero) fallisce stampo un determinato messaggio
  694. else
  695.  
  696. if [ "$ERROR_COUNT_DAILY" -gt "0" -o "$ERROR_COUNT_MONTHLY" -gt "0" ]
  697. then
  698.  
  699. BACKUP_KO="$LOGDATE | $BACKUP_KO"
  700. BACKUP_KO=${BACKUP_KO//NOMEDB/$ERROR_DB}
  701.  
  702. echo "$BACKUP_KO"
  703. echo "$BACKUP_KO" >> "$LOGS_DIR/$LOGS_FILENAME"
  704. fi
  705.  
  706. # se c'è un problema di connessione al database stampo il messaggio
  707. if [ "$ERROR_CONN_TODB" -gt "0" ]
  708. then
  709.  
  710. CONNEC_KO="$LOGDATE | $CONNEC_KO"
  711. CONNEC_KO=${CONNEC_KO//NOMEDB/$ERROR_CONN_DB}
  712.  
  713. echo "$CONNEC_KO"
  714. echo "$CONNEC_KO" >> "$LOGS_DIR/$LOGS_FILENAME"
  715. fi
  716. fi
  717. fi
  718.  
  719. exit

URL: http://www.lorenzone.it/my-ubuntu/script-bash-per-il-backup-dei-database-mysql/764/

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.