SHARE
TWEET

Script para backup de banco de dados FirebirdSQL

a guest Apr 22nd, 2010 691 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2. # Script desenvolvido por :
  3. # Hamacker <sirhamacker [em] gmail.com>
  4. # Data : 02/02/2006
  5. # Uso : Faz backup de servidores firebird em discos ou pendrives externos.
  6.  
  7. # trap ctrl-c and call ctrl_c() trap ctrl_c INT
  8. trap ctrl_c INT
  9. function ctrl_c() {
  10.   echo "*** backup interrompido pelo usuario ***" ;
  11.   do_sendmail;
  12.   exit 1;
  13. }
  14.  
  15. function log() {
  16.   if [ -z "$1" ] ; then
  17.     echo "Parametro para log esta vazio"
  18.     return
  19.   fi
  20.   if ! [ -f "$file_error_log" ] ; then
  21.     echo "Arquivo para registrar log [$file_error_log]  não existe !"
  22.     echo -ne "Criando um arquivo vazio..."
  23.     touch "$file_error_log"
  24.     echo "[OK]"
  25.   fi
  26.   echo "$1"
  27.   echo "$1" >>$file_error_log
  28. }
  29.  
  30. function do_montar_dev() {
  31.   alvo_device="$1"
  32.   alvo_pasta="$2"
  33.   RESULT_VALUE="FALHOU"
  34.   if [ "$alvo_device" = "" ] ; then
  35.      log "Erro na montagem de dispositivo : O nome do dispositivo não foi informado."
  36.      return
  37.   fi  
  38.   if [ "$alvo_pasta" = "" ] ; then
  39.      log "Erro na montagem de dispositivo : O nome do pasta onde seria montado o dispositivo não foi informado."
  40.      return
  41.   fi
  42.   if ! [ -d  "$alvo_pasta" ] ; then
  43.     mkdir -p "$alvo_pasta"
  44.   fi
  45.   # montando a unidade de destino, normalmente o usbdisk
  46.   mount -t $ponto_fs $alvo_device $alvo_pasta -o sync,nosuid,nouser,rw,dirsync,users
  47.   if [ $? -ne 0 ] ; then
  48.     log "A montagem da unidade de destino-backup falhou !"
  49.     log "Tentativa : mount -t $ponto_fs $ponto_device $ponto_destino -o sync,nosuid,nouser,rw,dirsync,users"
  50.     log "Certifique-se que :"
  51.     log "- tenha ligado a unidade numa porta USB deste servidor;"
  52.     log "- o dispositivo USB esteja ligado com o led de funcionamento piscando."
  53.     log "Desligue o aparelho, aguarde alguns instantes e ligue-o novamente"
  54.     log "e repita a operacao, se insistir o problema contate"
  55.     log "imediatamente o supervidor."
  56.   else
  57.     RESULT_VALUE="OK"  
  58.   fi
  59. }
  60.  
  61. function do_desmontar() {
  62.   alvo="$1"
  63.   if [ "$alvo" = "" ] || \
  64.      ! [ -d "$alvo" ] ; then
  65.      echo "alvo para desmontar nao existe : [$alvo]"
  66.      return
  67.   fi
  68.   # so posso desmontar unidades em /mnt ou /media
  69.   dir_to_unmount=$(mount |grep "$alvo"|cut -d" " -f 3|cut -d"/" -f 2)
  70.   if [ "$dir_to_unmount" != "media" ] && [ "$dir_to_unmount" != "mnt" ] ; then
  71.     return
  72.   fi
  73.  
  74.   # verifica se esta realmente montado
  75.   EXISTE=`mount |grep $alvo|wc -l`
  76.   if [ "$EXISTE" -gt 0 ] ; then
  77.     umount $alvo
  78.     [ -d "$alvo" ] && rmdir $alvo
  79.   fi
  80.  
  81.   # se o diretorio montado estiver vazio e estiver localizado em /mnt entao remove-lo
  82.   if ! [[ "$alvo" =~ "/media" ]] ; then
  83.     if [ -d "$alvo" ] && [ "$dir_to_unmount" = "mnt" ] ; then
  84.       if [ "$alvo/*" = "$alvo/*" ] ; then
  85.         echo "removendo diretorio vazio [$alvo]"
  86.         rmdir $alvo
  87.       fi
  88.     fi
  89.   fi
  90. }
  91.  
  92. function do_backup_firebirdsql() {
  93.   log "****************************************************"
  94.   log "* BACKUP DO SERVIDOR DE BANCO DE DADOS FIREBIRDSQL *"
  95.   log "****************************************************"
  96.   # montando a unidade de destino, normalmente o usbdisk
  97.   do_montar_dev "$ponto_device" "$ponto_destino"
  98.   if [ "$RESULT_VALUE" != "OK" ] ; then
  99.     do_sendmail;
  100.     return;
  101.   fi
  102.   # lista de databases do firebird a serem backupeados
  103.   # coloque os databases em ordem de importancia
  104.   # lista de pastas a serem backupeadas
  105.   unset backup_lista
  106.   backup_lista=( "${backup_lista[@]}" "192.168.1.14:admin1.fdb" )
  107.   #backup_lista=( "${backup_lista[@]}" "192.168.1.14:security2.fdb" )
  108.   #backup_lista=( "${backup_lista[@]}" "192.168.1.14:c:/Arquivos de programas/Firebird/Firebird_2_1/security2.fdb" )
  109.   #backup_lista=( "${backup_lista[@]}" "192.168.1.14:/var/lib/firebird2/system/security.fdb" )
  110.  
  111.   for fb_source in "${backup_lista[@]}" ; do  
  112.     # o nome do arquivo de backup sera praticamente o mesmo
  113.     # nome da origem, apenas o sufixo .fbk para diferenciar
  114.     # e os _ que subsituirao caracteres especiais
  115.     fb_dest="$fb_source"
  116.     fb_dest=${fb_dest//.fb/\.fbk}
  117.     fb_dest=${fb_dest//.fdb/\.fbk}
  118.     fb_dest=${fb_dest//.dat/\.fbk}
  119.     fb_dest=${fb_dest//.gdb/\.fbk}
  120.     # trocando / por _
  121.     fb_dest=${fb_dest//\//\_}
  122.     # trocando : por apenas -
  123.     fb_dest=${fb_dest//:/\-}
  124.     # trocando \\ por apenas -
  125.     fb_dest=${fb_dest//\\/\-}
  126.     # trocando -_ por apenas -  
  127.     fb_dest=${fb_dest//-_/\-}
  128.     # acrescentando o path de destino
  129.     fb_dest="$backup_folder/firebird/$fb_dest"
  130.     fb_folder=`dirname "$fb_dest"`
  131.     if ! [ -d "$fb_folder" ] ; then
  132.       mkdir -p "$fb_folder"
  133.     fi
  134.     log "Processando backup de  \"$fb_source\" para \"$fb_dest\""
  135.     $GBAK -t -user "$FB_USER" -password "$FB_PASSWORD" "$fb_source" "$fb_dest" 2>>$file_error_log
  136.     if [ $? -ne 0 ] ; then
  137.       log "[backup-falhou] firebird : $GBAK -v -t -user \"$FB_USER\" -password \"*****\" \"$fb_source\" \"$fb_dest\""
  138.       DO_BACKUP_STATUS_FIREBIRDSQL="N"
  139.     else
  140.       log "[sucesso] firebird : backup de \"$fb_source\" para \"$fb_dest\""
  141.     fi
  142.   done
  143.  
  144.   ### desmontando a unidade de destino
  145.   do_desmontar "$ponto_destino"
  146. }
  147.  
  148. ############################
  149. # Inicio do Programa       #
  150. ############################
  151.  
  152. export LANGUAGE="pt_BR:pt:pt_PT"
  153. export LANG="pt_BR.UTF-8"
  154.  
  155. if [ "$USER" != "root" ] ; then
  156.   echo  "Infelizmente este programa só pode ser executado com o usuario root ou através de [sudo]."
  157.   exit 3;
  158. fi
  159.  
  160. # Nome do usuário e senha que acessará a base
  161. # de dados FirebirdSQL
  162. FB_USER='SYSDBA'
  163. FB_PASSWORD='masterkey'
  164. GBAK="/usr/bin/gbak"
  165. #
  166. # Preparando o disco que armazenará o backup
  167. #
  168. ponto_device=""
  169. ponto_origem=""
  170. ponto_fs=auto
  171. ponto_montagem=/media/usbdisk
  172.  
  173. # Defina onde ficará o log desse backup
  174. backup_log_folder="/var/log/firebird/backup/`date +%Y-%m`";
  175.  
  176. # Insira os UUIDs usados para manter o backup
  177. # Isso permitirá que este script faça backup
  178. # apenas em discos previamente identificados
  179. # pode ser usado qualquer disco,
  180. # incluindo pendrives e cartoes SSD
  181. # Para saber o UUID dos discos inseridos :
  182. # ls -l /dev/disk/by-uuid/
  183. disco[0]="C91C-DA27"  # meu pendrive pessoal usando vfat
  184. disco[1]="dbf9372a-fd1e-4a5a-9e9d-011c9b093380"  # disco externo ext2 sata da empresa #1
  185. disco[2]="ff44fe91-e61e-4d42-9d8c-6fa4ba6e9571"  # disco externo ext2 sata da empresa #1
  186. disco[3]="4c93fef0-82f7-409e-b294-84d19b06c228"  # disco externo ext2 sata da empresa #1
  187. disco[4]="6113ec83-d13e-4e16-9938-6faa2bbb7f72"  # disco externo ext2 sata da empresa #1
  188. disco[5]="821be611-5106-4db6-9fb2-30b98c74ec52"  # use a mesma logica para acrescentar mais discos
  189. for disco_plugado in "${disco[@]}" ; do
  190.   if [ -e "/dev/disk/by-uuid/$disco_plugado" ] ; then
  191.     echo "Encontrado disco de backup :"
  192.     ponto_device="/dev/disk/by-uuid/$disco_plugado"
  193.     ponto_device=`find /dev/disk/by-uuid/ -type l -printf "%f\t%l\n" | grep "$disco_plugado"|cut  -f 2`
  194.     ponto_device=`echo /dev/${ponto_device//\//\.}|tr -d "."`
  195.     echo "UDEV disco detectado em $ponto_device"
  196.   fi
  197. done
  198.  
  199. ### se nao foi encontrado nenhum disco entao abandona
  200. ### o script.
  201. if [ "$ponto_device" = "" ] ; then
  202.   echo "Nenhuma unidade de backup foi detectada!"
  203.   exit 2;
  204. fi
  205. echo "ponto_device=$ponto_device"
  206. # verificando se a particao existe realmente
  207. fs_existe=`/sbin/fdisk -l|grep $ponto_device|wc -l`
  208. if [ "$fs_existe" -eq 0 ] ; then
  209.   echo "A particao indicada nao existe :"
  210.   echo $ponto_device
  211.   echo "operacao abortada !";
  212.   exit 1;
  213. fi;
  214.  
  215. ### o disco detectado nao pode estar montado
  216. ### isso previne que discos que façam parte do
  217. ### sistema -que nascem montados- nao sejam escaneados
  218. fs_existe=`/bin/mount|grep $ponto_device|wc -l`
  219. if [ $fs_existe -gt 0 ] ; then
  220.   echo "A particao indicada ja existe e esta montada :"
  221.   echo $ponto_device
  222.   echo "operacao abortada !";
  223.   exit 1;
  224. fi;
  225.  
  226. ### desmontando a unidade USB se ela estiver montada
  227. if [ "`mount |grep $ponto_device|wc -l`"  -gt 0 ] ; then
  228.   umount $ponto_device
  229.   if [ $? -ne 0 ] ; then
  230.     echo "Erro ao tentar desmontar $ponto_device."
  231.     echo "desmonte-a manualmente e repita a operacao."
  232.     echo "operacao cancelada."
  233.     exit 2;
  234.   fi
  235. fi
  236.  
  237. ponto_destino="$ponto_montagem"
  238.  
  239. #
  240. # variaives importantes que definem destino do backup
  241. # titulos, etc...
  242. backup_title="backup-`date +%Y-%m-%d`"
  243. file_error_log="$backup_log_folder/$backup_title.log"
  244. backup_folder="$ponto_destino/`date +%Y-%m-%d`"
  245. backup_inicio="`date +%Y-%m-%d+%H:%M`"
  246. data_ini="`date +%Y-%m-%d+%H:%M`"
  247.  
  248. if [ -f "$file_error_log" ] ; then
  249.   rm -f "$file_error_log"
  250.   touch "$file_error_log"
  251.   chmod 644 "$file_error_log"
  252. fi
  253.  
  254. # verificando se o ponto de montagem existe, se nao existir entao cria
  255. if ! [ -d $ponto_destino ] ; then
  256.   mkdir -p $ponto_destino
  257. fi
  258.  
  259. ### desmontando a unidade USB se ela estiver montada
  260. if [ "$ponto_device" != "" ] ; then
  261.   if [ "`mount |grep $ponto_device|wc -l`" -gt 0 ] ; then
  262.     umount $ponto_device
  263.   fi
  264. fi
  265.  
  266. # montando a unidade de destino, normalmente o usbdisk
  267. do_montar_dev "$ponto_device" "$ponto_destino"
  268. if [ "$RESULT_VALUE" != "OK" ] ; then
  269.   echo "Erro ao montar unidade [$ponto_device] em [$ponto_destino]"
  270.   exit 1;
  271. fi
  272.  
  273. log "Iniciando backup as $data_inicio"
  274.  
  275. # criando algumas pastas e arquivos
  276. if ! [ -d "$backup_folder" ] ; then
  277.   echo "criando pasta $backup_folder"
  278.   mkdir -p "$backup_folder"
  279.   if [ $? -ne 0 ] ; then
  280.     log "[backup-falhou] : erro ao criar pasta $backup_folder"
  281.   else
  282.     echo -n "pasta criada."  
  283.   fi
  284. fi
  285.  
  286. if ! [ -d "$backup_log_folder" ] ; then
  287.   mkdir -p "$backup_log_folder"
  288. fi
  289.  
  290. # preparando arquivo de log
  291. touch $file_error_log
  292.  
  293. # no relatorio final acrescentando o espaco disponivel
  294. # antes de iniciar o backup :
  295. log "-"
  296. log ".   Espaco na unidade $ponto_device antes de iniciar o backup :"
  297. log ".  `df -h $ponto_device|grep \"Uso\%\"`"
  298. log ".  `df -h $ponto_device|grep \"$ponto_device\"`"
  299. log "-"
  300.  
  301. ### desmontando a unidade USB se ela estiver montada
  302. if [ "$ponto_device" != "" ] ; then
  303.   if [ "`mount |grep $ponto_device|wc -l`" -gt 0 ] ; then
  304.     umount $ponto_device
  305.   fi
  306. fi
  307.  
  308. echo "Arquivo de log sera gerado em :"
  309. echo "=>$file_error_log"
  310.  
  311. #
  312. # Variaveis importantes
  313. #
  314.  
  315. data_ini=`date +%d-%m-%Y+%H:%M`
  316.  
  317. #########################
  318. # processando o backup  #
  319. #########################
  320. log "[inicio] Relatorio do backup $backup_title iniciado em $data_ini :"
  321.  
  322. do_backup_firebirdsql
  323.  
  324. echo "preparando um relatorio para envio..."
  325. data_fim=`date +%d-%m-%Y+%H:%M`
  326.  
  327. log "[fim] $backup_title iniciado em $data_ini ate $data_fim"
  328.  
  329. # Fim do Programa
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top