Script de Backup MySQL (Ajuda para revisão)

1. Script de Backup MySQL (Ajuda para revisão)

Jocelim Rodrigues Abdala Junior
jocelimjr2000

(usa Debian)

Enviado em 09/04/2019 - 16:36h

Boa tarde caros colegas, sou iniciante em linux, estou com uma dificuldade e gostaria muito da ajuda de vocês, para isso devo explicar minha necessidade.
Tenho um servidor de bando de dados (vou chamá-lo de SVA) e um outro somente para backup deste (vou chamá-lo de SVB). O SVB roda uma tarefa pelo cron a cada hora executando um bash. Basicamente ele exporta 3 bancos (20gb) do SVA para o SVB, depois compacta e salva-os em uma pasta específica ("BKP_09_04_2019_16h"). O SVB tem 3 hd´s disponíveis, onde gostaria de automatizar a escolha destes (ao completar o primeiro HD, escolhe o segundo, se este estiver cheio, escolhe o terceiro, se este estiver cheio, apaga e escolhe o primeiro, e assim sucessivamente).
Sei que muitos poderão dizer sobre a necessidade de manter esse número de backups e até de apagar os mais antigos, uma vez que estou guardando por um bom tempo, porém como sou apenas um funcionário, não tenho muito direito a votos (kkkkkkkk), ficando difícil convencê-los a adotar uma medida melhor, até por desconhecimento de qual seria.
Enfim, fiz um script (segue abaixo) que aparentemente está funcionando, mas gostaria da ajuda de vocês para verificar se estou fazendo correto ou se da pra melhorar de alguma maneira, ou ainda se alguém sabe se existe um software que faça algo semelhante rsrs.
Desde já agradeço a ajuda.


#!/bin/bash

################################################### ATENÇÃO ################################
## Script utilizado para backup e compactação de banco de dados mysql por hora ##
## Este segue a seguinte rotina: ##
## - BLOCO 1: Verificar qual hd está com espaço em disco ##
## - BLOCO 2: Preparar Pastas ##
## - BLOCO 3: Exportar bases em uma pasta temporária ##
## - BLOCO 4: Compactar bases ##
## - BLOCO 5: Apagar bases ##
## - BLOCO 6: Mover Backup ##
## - BLOCO 7: Finalizar ##
############################################################################################

##################################### VARIÁVEIS GERAIS #####################################
#Pasta Projeto
tempproj="/BACKUP"
#Pasta Temporária
tempfd="Temp"
#Pasta para bkp do script
pastascriptBKP="Script_e_LOG"
#Pasta do script original
pastascriptORI="Script"
#Nome do script
nomescript="BackupMysql_v2.sh"
#Ip do Servidor
ipserver="meuip"
#Usuário
user="usuario"
#Senha
senha="senha"
#Hora Atual
horaatual=$(date +%d-%m-%Y_%H)
#Nome Pasta Principal para BKP Diário
pastaDia="BackupBanco_Dia"
#Nome Pasta Principal para BKP Horário
pastaHora="BackupBanco_Hora"
#Bancos de dados
databases=(
"banco1"
"banco2"
"banco3"
)
#HDs para arquivar
hdds=(
"/mnt/hdd1"
"/mnt/hdd2"
"/mnt/hdd3"
)
#Percentual Aceitavel
percent="95"
#Nome da Pasta para BKP (por hora)
pastaBancoBkp="Bkp_"$horaatual
#Arquivo de Log
arqLog=$tempproj/$tempfd/"Log_"$horaatual".txt"
#Pasta do arquivo de marcação
marcadorArq=$tempproj/$pastascriptORI/"hd.txt"
################################### /VARIÁVEIS GERAIS #####################################


##################################### FUNÇÕES GERAIS ######################################
#Imprimir dados
function Imprimir(){
echo $* >> $arqLog
}

#Pular linha de acordo com a quantidade informada
function PularLinhas(){
#Loop
for i in $(seq 1 $*);
do
#Quebra de Linha
Imprimir -e "\n\r"
done
}

#Criar arquivo de marcação com dados do hd atual
function Marcador(){
echo $* > $marcadorArq
}

#Checar espaço em disco
function CheckSpace(){
##Guardar Informações do disco em variáveis
esp=($(df $* |awk 'NR==2 {print $2,$3,$4,$5}'|sed 's/%//'))
#Percentual utilizado
space_percent="${esp[3]}"
#Espaço livre
space_free="${esp[2]}"
#Espaço utilizado
space_occupied="${esp[1]}"
#Espaço total
space_total="${esp[0]}"

#Condição para verificar se espaço em disco
if [[ $space_percent -gt $percent ]] && PularLinhas 1
then
#Exibir informacoes
Imprimir "-- Status: Error | Message: Disco cheio | Volume: "$*" | Espaço Total: "$space_total" | Espaço Livre: "$space_free" | Espaço Ocupado: "$space_occupied" | Percentual Ocupado: "$space_percent" |"
#Variável para retorno, identificando se ocorreu erro ou não
retorno=0
else
#Exibir informações
Imprimir "-- Status: Ok | Message: Disco selecionado | Volume: "$*" | Espaço Total: "$space_total" | Espaço Livre: "$space_free" | Espaço Ocupado: "$space_occupied" | Percentual Ocupado: "$space_percent" |"
#Variável para retorno, identificando se ocorreu erro ou não
retorno=1
fi

#Retornar resultado do identificador
return $retorno
}

#Formatar disco
function FormatDisk () {
#Exibir informações
Imprimir "Apagando os arquivos em $*"
#Apagar
rm -rf $*/*
}

#Montar Loop de Array de HDs
function VarrerArrayHDD (){

# ARQUIVO DE MARCAÇÃO PARA
# VERIFICAR O HD UTILIZADO ATUALMENTE
##

#Verificar se Arquivo de marcação existe
if [ -e "$marcadorArq" ];
then
#SE EXISTIR
#Ler arquivo
while read line; do
#Selecionar Disco
disk_arq=$line
#Fim
done < $marcadorArq
else
#SE NÃO EXISTIR
#Selecionar primeiro disco
disk_arq=${hdds[0]}
#Criar arquivo de marcação
Marcador $disk_arq
fi


#
# LOOP PARA COLETAR O PRÓXIMO HD
##

#Iniciar Contador
c=0
#Loop HDs
for i in ${hdds[@]};
do
#Guardar nome em variável
disk0=$i

#Se o disco selecionado no loop for igual ao escrito no arquivo
if [ $disk0 == $disk_arq ]
then

#Condição para verificar se é o ultimo disco
if [ $disk0 == ${hdds[@]: -1} ]
then
#Selecionar próximo disco (primeiro)
disk1=${hdds[0]}
else
#Somar contador
c=$(($c+1))
#Selecionar próximo disco
disk1=${hdds[$c]}
fi

#Verificar espaço em disco
CheckSpace $disk0

#Se a função retornar 1, o primeiro disco verificado contém espaço livre
#Seleciona e o mantém no arquivo de marcação
if [ $retorno == 1 ]
then
#Disco Selecionado
selec_disk=$disk0
else
#Formatar próximo disco
FormatDisk $disk1
#Criar arquivo de marcação
Marcador $disk1
#Disco Selecionado
selec_disk=$disk1
fi

#Parar Loop
break;
else
Imprimir ""
fi

#Somar contador
c=$(($c+1))
done
}

#Criar Pastas
function CriarPasta(){
#Condição para ver se a pasta já existe
if [ -d $* ]
then
#Imprimir mensagem
Imprimir "-- Pasta já existente, não necessita ser criada."
else
#Criar Pasta
mkdir $*

#Condição informar se ouve erro ao deletar
if [[ $? == 0 ]]
then
#Imprimir mensagem
Imprimir "-- A pasta foi criada com sucesso."
else
#Imprimir mensagem
Imprimir "-- ATENÇÃO! Erro ao criar pasta."
fi

fi
}

#Montar Loop de Array de Databases
function VarrerArrayDB (){
#Loop DataBases
for i in ${databases[@]};
do
#Guardar nome em variável
database_selec=$i
#Imprimir mensagem
Imprimir "- Selecionando DataBase: "$database_selec
#Chamar SubFunção
eval $* $database_selec
#Quebra de Linha
PularLinhas 1
done
}

#Exportar DB
function ExportDB (){
#Imprimir mensagem
Imprimir "- Verificando se existe..."
#Verificar se tabela existe
mysql -h $ipserver -u $user -p$senha -e "USE $*"

#Condição para exportar database caso exista
if [[ $? == 0 ]]
then
#Imprimir mensagem
Imprimir "-- OK"
Imprimir "- Exportando..."
#Exportar database
/usr/bin/mysqldump -h $ipserver -u $user -p$senha --routines --triggers --single-transaction --quick $* > $tempproj/$tempfd/$*"_"$horaatual.sql

#Condição informar se ouve erro ao exportar database
if [[ $? == 0 ]]
then
#Imprimir mensagem
Imprimir "-- Exportado com sucesso."
else
#Imprimir mensagem
Imprimir "-- ATENÇÃO! Erro ao exportar."
fi

else
#Imprimir mensagem
Imprimir "-- ATENÇÃO! DataBase não existe."
fi

}

#Compactar DB
function CompactDB (){
#Imprimir mensagem
Imprimir "- Verificando se arquivo exportado existe..."
#Definir arquivo exportado
arq_exp=$tempproj/$tempfd/$*"_"$horaatual.sql

#Condição para verificar se arquivo exportado existe
if [ -e $arq_exp ] ; then
#Imprimir mensagem
Imprimir "-- OK"
Imprimir "- Compactando..."
#Compactar
tar Jcf $tempproj/$tempfd/$*"_"$horaatual.tar.xz $arq_exp

#Condição informar se ouve erro na compactação
if [[ $? == 0 ]]
then
#Imprimir mensagem
Imprimir "-- Compactado com sucesso."
else
#Imprimir mensagem
Imprimir "-- ATENÇÃO! Erro ao compactar."
fi

else
Imprimir "-- ATENÇÃO! Arquivo exportado deste banco não existe."
fi
}

#Deletar DB
function DeleteDB() {
#Imprimir mensagem
Imprimir "- Verificando se arquivo exportado existe..."
#Definir arquivo exportado
arq_exp=$tempproj/$tempfd/$*"_"$horaatual.sql

#Condição para verificar se arquivo exportado existe
if [ -e $arq_exp ] ; then
#Imprimir mensagem
Imprimir "-- OK"
Imprimir "- Deletando..."
#Deletar
rm $arq_exp

#Condição informar se ouve erro ao deletar
if [[ $? == 0 ]]
then
#Imprimir mensagem
Imprimir "-- Deletado com sucesso."
else
#Imprimir mensagem
Imprimir "-- ATENÇÃO! Erro ao deletar."
fi

else
Imprimir "-- ATENÇÃO! Arquivo exportado deste banco não existe."
fi
}

#Mover DB
function MoveDB() {
#Imprimir mensagem
Imprimir "- Verificando se arquivo exportado existe..."
#Definir arquivo exportado
arq_exp=$tempproj/$tempfd/$*"_"$horaatual.tar.xz

#Condição para verificar se arquivo exportado existe
if [ -e $arq_exp ] ; then
#Imprimir mensagem
Imprimir "-- OK"
Imprimir "- Movendo..."
#Mover
mv $arq_exp $pastabkp

#Condição informar se ouve erro ao mover
if [[ $? == 0 ]]
then
#Imprimir mensagem
Imprimir "-- Movido com sucesso."
else
#Imprimir mensagem
Imprimir "-- ATENÇÃO! Erro ao mover."
fi

else
Imprimir "-- ATENÇÃO! Arquivo exportado deste banco não existe."
fi
}
#################################### /FUNÇÕES GERAIS ######################################

#Quebra de Linha
PularLinhas 1

#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ Backup Banco de dados v2.1 +"
Imprimir "+ Mysql - Backup +"
Imprimir "+=================================+"

#Quebra de Linha
PularLinhas 1

######################################### BLOCO 1 #########################################
#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ INÍCIO DO BLOCO 1/7 +"
Imprimir "+ Verificar espaço em disco de +"
Imprimir "+ acordo com percentual ajustado +"
Imprimir "+ "$percent" +"
Imprimir "+=================================+"

#Chamar função para varrer array
VarrerArrayHDD

#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ TÉRMINO DO BLOCO 1/7 +"
Imprimir "+=================================+"
######################################## /BLOCO 1 #########################################

#Quebra de Linha
PularLinhas 2

######################################### BLOCO 2 #########################################
#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ INÍCIO DO BLOCO 2/7 +"
Imprimir "+ Preparar Pastas +"
Imprimir "+=================================+"

#Quebra de Linha
PularLinhas 1

#Definir Pasta Principal
if [ $(date +%H) = 23 ]
then
pastacopia=$pastaDia
Imprimir "- Selecionado Pasta Principal: Pasta Dia."
else
pastacopia=$pastaHora
Imprimir "- Selecionado Pasta Principal: Pasta Hora."
fi

#Preparar variáveis
pastaprincipal=$selec_disk/$pastacopia
pastabkp=$pastaprincipal/$pastaBancoBkp
pastascript=$pastabkp/$pastascriptBKP

#Criar pasta principal
Imprimir "- Criando pasta principal..."
CriarPasta $pastaprincipal

#Criar pasta banco bkp
Imprimir "- Criando pasta para BKP..."
CriarPasta $pastabkp

#Criar pasta banco bkp
Imprimir "- Criando pasta para script..."
CriarPasta $pastascript

#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ TÉRMINO DO BLOCO 2/7 +"
Imprimir "+=================================+"
######################################## /BLOCO 2 #########################################

#Quebra de Linha
PularLinhas 2

######################################### BLOCO 3 #########################################
#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ INÍCIO DO BLOCO 3/7 +"
Imprimir "+ Exportar DataBases +"
Imprimir "+=================================+"

#Chamar função para varrer array indicando qual subfunção executar
VarrerArrayDB ExportDB

#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ TÉRMINO DO BLOCO 3/7 +"
Imprimir "+=================================+"
######################################## /BLOCO 3 #########################################

#Quebra de Linha
PularLinhas 2

######################################### BLOCO 4 #########################################
#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ INÍCIO DO BLOCO 4/7 +"
Imprimir "+ Compactar DataBases +"
Imprimir "+=================================+"

#Chamar função para varrer array indicando qual subfunção executar
VarrerArrayDB CompactDB

#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ TÉRMINO DO BLOCO 4/7 +"
Imprimir "+=================================+"
######################################## /BLOCO 4 #########################################

#Quebra de Linha
PularLinhas 2

######################################### BLOCO 5 #########################################
#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ INÍCIO DO BLOCO 5/7 +"
Imprimir "+ Apagar DataBases +"
Imprimir "+=================================+"

#Chamar função para varrer array indicando qual subfunção executar
VarrerArrayDB DeleteDB

#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ TÉRMINO DO BLOCO 5/7 +"
Imprimir "+=================================+"
######################################## /BLOCO 5 #########################################

#Quebra de Linha
PularLinhas 2

######################################### BLOCO 6 #########################################
#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ INÍCIO DO BLOCO 6/7 +"
Imprimir "+ Mover Arquivos +"
Imprimir "+=================================+"

#Chamar função para varrer array indicando qual subfunção executar
VarrerArrayDB MoveDB

#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ TÉRMINO DO BLOCO 6/7 +"
Imprimir "+=================================+"
######################################## /BLOCO 6 #########################################

#Quebra de Linha
PularLinhas 2

######################################### BLOCO 7 #########################################
#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ INÍCIO DO BLOCO 7/7 +"
Imprimir "+ Finalizar +"
Imprimir "+=================================+"

Imprimir "- Copiando Script..."
cp $tempproj/$pastascriptORI/$nomescript $pastascript

#Condição informar se ouve erro ao Copiar
if [[ $? == 0 ]]
then
#Imprimir mensagem
Imprimir "-- Copiado com sucesso."
else
#Imprimir mensagem
Imprimir "-- ATENÇÃO! Erro ao copiar."
fi

Imprimir "- Movendo LOG..."
#Mover
mv $arqLog $pastascript
#Alterar Caminho do LOG
arqLog=$pastascript/"Log_"$horaatual".txt"

#Condição informar se ouve erro ao Mover
if [[ $? == 0 ]]
then
#Imprimir mensagem
Imprimir "-- Movido com sucesso."
else
#Imprimir mensagem
Imprimir "-- ATENÇÃO! Erro ao mover."
fi

Imprimir "FIM :D"

#Quebra de Linha
PularLinhas 2

#Imprimir mensagem
Imprimir "+=================================+"
Imprimir "+ TÉRMINO DO BLOCO 7/7 +"
Imprimir "+=================================+"
######################################## /BLOCO 7 #########################################



  


2. Re: Script de Backup MySQL (Ajuda para revisão)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/04/2019 - 19:11h


Boa noite jocelimjr2000 .
Dei uma verificada rápida, e encontrei um erro....
Na function CheckSpace, deve pegar somente os números, desprezando a %.
O mesmo em:
#Percentual Aceitavel
percent="95%"
Não será possível testar se "50% é maior que 95%"
O teste:
[[ $space_percent > $percent ]]
Esta errado....
O correto é:
[[ $space_percent -gt $percent ]]
Ou
(($space_percent > $percent))

Dica: Execute o "df" uma unica vez....
esp=($(df /dev/sdb1 |awk 'NR==2 {print $2,$3,$4,$5}'|sed 's/%//'))
space_percent="${esp[3]}"
space_free="${esp[2]}"
space_occupied="${esp[1]}"
space_total="${esp[0]}"


Mensagem: => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


3. Re: Script de Backup MySQL (Ajuda para revisão)

Jocelim Rodrigues Abdala Junior
jocelimjr2000

(usa Debian)

Enviado em 09/04/2019 - 19:35h

msoliver escreveu:


Boa noite jocelimjr2000 .
Dei uma verificada rápida, e encontrei um erro....
Na function CheckSpace, deve pegar somente os números, desprezando a %.
O mesmo em:
#Percentual Aceitavel
percent="95%"
Não será possível testar se "50% é maior que 95%"
O teste:
[[ $space_percent > $percent ]]
Esta errado....
O correto é:
[[ $space_percent -gt $percent ]]
Ou
(($space_percent > $percent))

Dica: Execute o "df" uma unica vez....
esp=($(df /dev/sdb1 |awk 'NR==2 {print $2,$3,$4,$5}'|sed 's/%//'))
space_percent="${esp[3]}"
space_free="${esp[2]}"
space_occupied="${esp[1]}"
space_total="${esp[0]}"


Mensagem: => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


Boa noite Marcelo, primeiramente muito obrigado pela ajuda
Fiz as alterações mas ainda não testei, acabei não indo trabalhar por mau estar, mas alterei aqui para perguntar, fiz as alterações certas ?rs
Muito obrigado.


4. Re: Script de Backup MySQL (Ajuda para revisão)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/04/2019 - 21:50h

jocelimjr2000 , verifiquei as alterações, aparentemente está correto....

Sugestão para verificar espaço no hdds:
for ((n=0;n<${#hdds[@]};n++));do 
esp=($(df "${hdds[$n]}"|awk 'NR==2 {print $2,$3,$4,$5}'|sed 's/%//'));
((${esp[3]}<${percent})) && { echo -e "\n${hdds[$n]} OKAY";retorno=1;n=$((${#hdds[@]}+1));} || echo -e "\n${hdds[$n]} NOK";
done


Mensagem => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


5. Re: Script de Backup MySQL (Ajuda para revisão)

Jocelim Rodrigues Abdala Junior
jocelimjr2000

(usa Debian)

Enviado em 09/04/2019 - 22:18h

msoliver escreveu:

jocelimjr2000 , verifiquei as alterações, aparentemente está correto....

Sugestão para verificar espaço no hdds:
for ((n=0;n<${#hdds[@]};n++));do 
esp=($(df "${hdds[$n]}"|awk 'NR==2 {print $2,$3,$4,$5}'|sed 's/%//'));
((${esp[3]}<${percent})) && { echo -e "\n${hdds[$n]} OKAY";retorno=1;n=$((${#hdds[@]}+1));} || echo -e "\n${hdds[$n]} NOK";
done


Mensagem => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


Marcelo, confesso que me perdi na sua sugestão, não consegui entender o processo (iniciante é fogo kkk), poderia me explicar por gentileza? Obrigado


6. Re: Script de Backup MySQL (Ajuda para revisão)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/04/2019 - 23:40h


jocelimjr2000 escreveu:

msoliver escreveu:

jocelimjr2000 , verifiquei as alterações, aparentemente está correto....

Sugestão para verificar espaço no hdds:
for ((n=0;n<${#hdds[@]};n++));do 
esp=($(df "${hdds[$n]}"|awk 'NR==2 {print $2,$3,$4,$5}'|sed 's/%//'));
((${esp[3]}<${percent})) && { echo -e "\n${hdds[$n]} OKAY";retorno=1;n=$((${#hdds[@]}+1));} || echo -e "\n${hdds[$n]} NOK";
done


Mensagem => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


Marcelo, confesso que me perdi na sua sugestão, não consegui entender o processo (iniciante é fogo kkk), poderia me explicar por gentileza? Obrigado

"Pega" os hdds da array, um a um e testa...
for ((n=0;n<${#hdds[@]};n++));do #isto é um contador, de 0 até o nº de arrays em ${hdds[@]}
esp=($(df "${hdds[$n]}"|awk 'NR==2 {print $2,$3,$4,$5}'|sed 's/%//')); #para cada hdds gera a array ${esp[@]}, com os dados de df
((${esp[3]}<${percent})) && { echo -e "\n${hdds[$n]} OKAY";retorno=1;n=$((${#hdds[@]}+1));} || echo -e "\n${hdds[$n]} NOK"; #compara, estando OK, interrompe o contador "n=$((${#hdds[@]}+1))", Atribuo para "n", um numero maior que a quantidade de arrays em hdds.
Acabei de montar uma mais "enxuta", segue:
df ${hdds[@]}|awk 'NR>1 gsub("%", "", $5) {if($5<=56) print "OKAY" ,$1,$2,$3,$4,$5;else print "ERRO" ,$1,$2,$3,$4,$5}'|sort -t" " -k6 

OKAY /dev/sda4 470550524 49648156 420902368 11
OKAY /dev/sdc1 1949776 1019148 813536 56
ERRO /dev/sdb1 3914752 2260668 1654084 58
#Testa todos hdds, coloca o Status (ERRO/OKAY), e ordena pelo campo Percentual, do menor para o maior...
Por hoje é só . . . . rsrsrsr
Té +
Mensagem => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


7. Re: Script de Backup MySQL (Ajuda para revisão)

Jocelim Rodrigues Abdala Junior
jocelimjr2000

(usa Debian)

Enviado em 11/04/2019 - 13:32h

Boa tarde Marcelo,
Obrigado pela explicação, me ajudou bastante.
Só mais uma dúvida (rsrs) quanto ao loop verificando os espaços do hd, quando os 3 hds estiverem cheio, para qual ele vai?
Por exemplo:
- Ao preencher o 1º, ele seleciona o 2º (disco 1 cheio)
- Ao preencher o 2º, ele seleciona o 3º (discos 1 e 2 cheios)
- Ao preencher o 3º, ele apaga e seleciona o 1º (discos 2 e 3 cheios)
- Ao preencher o 1º, qual ele seleciona (pois os discos 2 e 3 estarão cheios)
Um dos motivos de eu ter usado um arquivo externo, marcando qual hd está sendo usado no momento, daí ele sempre apaga e seleciona o próximo.
Não sei se teria uma foma melhor de resolver essa questão, sem usar arquivos externos.
Muito obrigado.


8. Re: Script de Backup MySQL (Ajuda para revisão)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 11/04/2019 - 21:13h

jocelimjr2000 escreveu:

Boa tarde Marcelo,
Obrigado pela explicação, me ajudou bastante.
Só mais uma dúvida (rsrs) quanto ao loop verificando os espaços do hd, quando os 3 hds estiverem cheio, para qual ele vai?
Por exemplo:
- Ao preencher o 1º, ele seleciona o 2º (disco 1 cheio)
- Ao preencher o 2º, ele seleciona o 3º (discos 1 e 2 cheios)
- Ao preencher o 3º, ele apaga e seleciona o 1º (discos 2 e 3 cheios)
- Ao preencher o 1º, qual ele seleciona (pois os discos 2 e 3 estarão cheios)
Um dos motivos de eu ter usado um arquivo externo, marcando qual hd está sendo usado no momento, daí ele sempre apaga e seleciona o próximo.
Não sei se teria uma foma melhor de resolver essa questão, sem usar arquivos externos.
Muito obrigado.


jocelimjr2000 , boa noite.
Hoje foi difícil logar no VOL....
Curiosidade: Qto tempo demora para fazer o backup?
Vamos lá....

#VARIÁVEIS das CORES
VM="\x1B[0;38;05;1m"
VD="\x1B[0;38;05;2m"
CF="\x1B[m"

line() { printf '%*s' "30" '' | sed "s/ /—/g";}

function define_hd_uso() {
for ((n=0;n<${#hdds[@]};n++));do
stt00=($(df "${hdds[$n]}"|awk 'NR>1 gsub("%", "", $5) {print $1,$2,$3,$4,$5;}'));
if ((${stt00[4]}<${percent}));then
awk '{printf " '$(line)'\n'${VD}' Status: OKAY\n HD em USO: %s\n Total: %sk\n Livre: %sk\n Ocupado: %sk\n Ocupado: %s%%'$FC'\n" ,$1,$2,$3,$4,$5}' <<< "${stt00[@]}"
proximo_hdd $n #chama função proximo_hdd com o argumento $n
n=$((${#hdds[@]}+1)); #Interrompe o laço
else
awk '{printf " '$(line)'\n'${VM}' Status: ERRO\n HD: %s\n Total: %sk\n Livre: %sk\n Ocupado: %sk\n Ocupado: %s%%'$CF'\n" ,$1,$2,$3,$4,$5}' <<< "${stt00[@]}"
fi;
done
}

function proximo_hdd() {
NN="$1"
#Define o próximo hdd
((($NN+1)==${#hdds[@]})) && prxhd=0 || prxhd=$((NN+1))
#STATUS do PRÓXIMO hdd
stt01=$(df ${hdds[$prxhd]}|awk 'NR>1 gsub("%", "", $5) {if($5<'$percent') print "OKAY";else print "ERRO"}')
#Se o próximo estiver no limite (CHEIO), formata
if [[ ${stt01} = "ERRO" ]];then
echo -e "\n$VM $(line)\n #FORMATAR ${hdds[${prxhd}]}#\n $(line)$FC\n";
#comando para formatar#
fi
}

Acho que é isso....
Fiz vários testes aqui e funcionou a contento.....
Te +

MENSAGEM: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


9. Re: Script de Backup MySQL (Ajuda para revisão)

Jocelim Rodrigues Abdala Junior
jocelimjr2000

(usa Debian)

Enviado em 17/04/2019 - 10:42h

msoliver escreveu:

jocelimjr2000 escreveu:

Boa tarde Marcelo,
Obrigado pela explicação, me ajudou bastante.
Só mais uma dúvida (rsrs) quanto ao loop verificando os espaços do hd, quando os 3 hds estiverem cheio, para qual ele vai?
Por exemplo:
- Ao preencher o 1º, ele seleciona o 2º (disco 1 cheio)
- Ao preencher o 2º, ele seleciona o 3º (discos 1 e 2 cheios)
- Ao preencher o 3º, ele apaga e seleciona o 1º (discos 2 e 3 cheios)
- Ao preencher o 1º, qual ele seleciona (pois os discos 2 e 3 estarão cheios)
Um dos motivos de eu ter usado um arquivo externo, marcando qual hd está sendo usado no momento, daí ele sempre apaga e seleciona o próximo.
Não sei se teria uma foma melhor de resolver essa questão, sem usar arquivos externos.
Muito obrigado.


jocelimjr2000 , boa noite.
Hoje foi difícil logar no VOL....
Curiosidade: Qto tempo demora para fazer o backup?
Vamos lá....

#VARIÁVEIS das CORES
VM="\x1B[0;38;05;1m"
VD="\x1B[0;38;05;2m"
CF="\x1B[m"

line() { printf '%*s' "30" '' | sed "s/ /—/g";}

function define_hd_uso() {
for ((n=0;n<${#hdds[@]};n++));do
stt00=($(df "${hdds[$n]}"|awk 'NR>1 gsub("%", "", $5) {print $1,$2,$3,$4,$5;}'));
if ((${stt00[4]}<${percent}));then
awk '{printf " '$(line)'\n'${VD}' Status: OKAY\n HD em USO: %s\n Total: %sk\n Livre: %sk\n Ocupado: %sk\n Ocupado: %s%%'$FC'\n" ,$1,$2,$3,$4,$5}' <<< "${stt00[@]}"
proximo_hdd $n #chama função proximo_hdd com o argumento $n
n=$((${#hdds[@]}+1)); #Interrompe o laço
else
awk '{printf " '$(line)'\n'${VM}' Status: ERRO\n HD: %s\n Total: %sk\n Livre: %sk\n Ocupado: %sk\n Ocupado: %s%%'$CF'\n" ,$1,$2,$3,$4,$5}' <<< "${stt00[@]}"
fi;
done
}

function proximo_hdd() {
NN="$1"
#Define o próximo hdd
((($NN+1)==${#hdds[@]})) && prxhd=0 || prxhd=$((NN+1))
#STATUS do PRÓXIMO hdd
stt01=$(df ${hdds[$prxhd]}|awk 'NR>1 gsub("%", "", $5) {if($5<'$percent') print "OKAY";else print "ERRO"}')
#Se o próximo estiver no limite (CHEIO), formata
if [[ ${stt01} = "ERRO" ]];then
echo -e "\n$VM $(line)\n #FORMATAR ${hdds[${prxhd}]}#\n $(line)$FC\n";
#comando para formatar#
fi
}

Acho que é isso....
Fiz vários testes aqui e funcionou a contento.....
Te +

MENSAGEM: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver




Bom dia Marcelo,
Primeiramente desculpe na demora em responder, meu note estragou e fiquei uns dias sem. :(
Muito obrigado pela ajuda, ficou show o esquema de cores rs.
O bkp está levando umas duas horas pra executar (por causa da compactação tar.xz), eu alterei para tar.gz afim de reduzir este tempo (mesmo que consuma mais espaço em disco), ainda não fiz testes, vou colocar também um contador no script, pra ver quanto tempo levou.
Devido o meu imprevisto, ainda não consegui implementar esse trecho ao código, somente rodei para ver como era.
Assim que o fizer eu atualizo aqui.
Obrigado. :D


10. Re: Script de Backup MySQL (Ajuda para revisão)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/04/2019 - 15:53h

jocelimjr2000 , boa tarde.
Se o tempo para concluir o backup é de 2 horas, e será agendado no CRON para executar a cada 1 hora.....
Vejo que terá problema....
Para verificar o tempo de duração:
Sugestão:
#No inicio do script, atribua o valor para a var INI.
INI=$(date +%s.%N)
#No final do script . . .
FIM=$(date +%s.%N)
TEMPO=$( bc <<< "scale=9;10800+(${FIM}-${INI})")
#Tempo de duração em: HH, MM, SS e Nano Segundo
date -d"@${TEMPO}" +%H:%M:%S.%N

Mensagem:=> echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts