-
Notifications
You must be signed in to change notification settings - Fork 5
/
mydumps
executable file
·221 lines (171 loc) · 7.77 KB
/
mydumps
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#!/bin/bash
#
# SCRIPT para fazer dump dos bancos de dados do MYSQL
# Ele faz dump banco a banco e envia relatorio por e-mail
#
#
# autor: [email protected]
#
#
# pre-requisitos de pacotes:
#
# mysqldump
# bzip2
# mail
#
#
# como usar?
# configure as variaveis/constantes internas e execute-o
# ./mydumps
#
#### variaveis/constantes ###########################################################
BDIR="/caminho/para/mysqldumps" # diretorio base
DBLIST="$BDIR/mylist.txt" # lista de bancos para dump
BK="$BDIR/dumps" # diretorio de destino dos dumps
BL="$BDIR/logs" # diretorio de destino dos logs
NB="14" # numero maximo de backups de um mesmo banco no disco
BE="mysql|test|information_schema" # bancos que nao vao entrar no backup
NW=$(date +%Y%m%d.%H%M%S) # variavel de hora para os logs da rotina
LN="$BL/mysql.dumps.$NW.log" # formato do arquivo de log
LR="$BL/mysql.dumps.errors.$NW.log" # formato do arquivo de log
MYSQLDUMP=$(which mysqldump) # caminho para comando mysqldump
MYSQL=$(which mysql) # caminho para o comando mysql
MAILX=$(which mail) # caminho para comando mail
SEND_REPORT_MAIL="YES" # envia e-mail com relatorio de dumps YES/NO
REPORT_MAIL="[email protected]" # email para receber relatorio de dumps
SEND_ERROR_MAIL="YES" # envia email com relatorio de erros nos dumps YES/NO
ERROR_MAIL="[email protected]" # email para receber relatorios de erro
### verificando se voce é o usuario root ###################################
if [ $(id -u) != "0" ];then
echo -e "\nErro: este script precisa ser executado com usuario root..."
echo -e "Ajuda: torne-se root, use o comando (su -) ou (sudo -i).\n"
exit 1
fi
### verifica se as ferramentas do mysql estao instalados ####################################
if [ ! -x $MYSQLDUMP ];then
echo -e "\nErro: Este script não conseguiu encontrar o comando MYSQLDUMP"
echo -e "Ajuda: Corrija o caminho na variavel MYSQLDUMP\n"
exit 1
fi
if [ ! -x $MYSQL ];then
echo -e "\nErro: Este script não conseguiu encontrar o comando psql"
echo -e "Ajuda: Corrija o caminho na variavel MYSQL\n"
exit 1
fi
### verifica se o mailx esta instalado ####################################
if [ ! -x $_mail ];then
echo "Erro: Este script não conseguiu encontrar o comando MAIL"
echo "Ajuda: Corrija o caminho na variavel MAILX"
exit 1
fi
### verificando se existe o diretorio para armazenar os logs #############################
if [ ! -d $BL ]; then
echo -e "\nErro: o diretorio de logs nao existe!"
echo -e "Ajuda: ajuste o conteudo da variavel BL\n"
exit 1
fi
### verificando se existe o diretorio para armazenar os dumps #############################
if [ ! -d $BK ]; then
echo -e "\nErro: o diretorio de destino nao existe!"
echo -e "Ajuda: ajuste o conteudo da variavel BK\n"
exit 1
fi
### verificando se existe o arquivo com a lista de sgbds #############################
if [ ! -f $DBLIST ]; then
echo -e "\nErro: o arquivo com a lista de sgbds nao existe!"
echo -e "Ajuda: ajuste o conteudo da variavel DBLIST\n"
exit 1
fi
### funcao de backup ##########################################################
function backup()
{
echo -e "\nIniciando rotina de dump de bancos mysql... $(date +%Y%m%d.%H%M%S)\n" | tee -a $LN
echo "O script esta configurado para armazenar os ultimos ( $NB ) dumps..."|tee -a $LN
echo "O script esta ignorando os seguintes bancos: [ $BE ]"|tee -a $LN
echo -e "\nRotina sendo executado no servidor ( $HOSTNAME )" |tee -a $LN
echo "Os bancos estao sendo salvos em: [ $BK ]"|tee -a $LN
echo -e "Os logs estao sendo salvos em: [ $BL ]\n"|tee -a $LN
echo "Buscando informacoes de conexao nos sgbd's no arquivo $DBLIST ..." | tee -a $LN
# pegando infos no arquivo com lista de bancos
for DB in `cat $DBLIST |grep -v ^#|grep -v ^$`;do
HOST=`echo $DB | cut -d: -f1`
USER=`echo $DB | cut -d: -f2`
PASS=`echo $DB | cut -d: -f3`
NAME=`echo $DB | cut -d: -f4`
# laco para pegar nome dos bancos
for DBBKP in $($MYSQL -h$HOST -u$USER -p$PASS -B -s -e 'show databases;' 2>> $LR| egrep -v $BE); do
echo -e "\nefetuando dump do banco [ $DBBKP ] no servidor [ $HOST , $NAME ] com usuario [ $USER ] " | tee -a $LN
# exportando variavel de data
export DUMPDATE=$(date +%Y%m%d.%H%M%S)
# executando dump
$MYSQLDUMP --host=$HOST --user=$USER --password=$PASS $DBBKP 2>> $LR | bzip2 -c > $BK/mysql.$NAME.$DBBKP.$DUMPDATE.dump.bz2
# verificando se o arquivo de dump foi criado
if [ -f $BK/mysql.$NAME.$DBBKP.$DUMPDATE.dump.bz2 ];then
SIZE=$(du -sk $BK/mysql.$NAME.$DBBKP.$DUMPDATE.dump.bz2 |awk '{ print $1}')
if [ $SIZE -lt "50" ];then
echo "***** arquivo com dump do banco [ $DBBKP ] foi gerado e tem tamanho inferior a 50 KB por favor verifique, tamanho em KB $SIZE." | tee -a $LN
else
echo "arquivo com dump do banco [ $DBBKP ] foi gerado, tamanho total do arquivo $SIZE KB." | tee -a $LN
fi
else
echo "arquivo de dump [ $DBBKP ] do servidor [ $HOST , $NAME ] nao foi gerado corretamente, por favor verifique." | tee -a $LN
exit 1
fi
# rotina para limpeza de arquivos
if [ $(ls -1 $BK/mysql.$NAME.$DBBKP.*|wc -l) -gt $NB ];then
OLDFILE=$(ls -1 $BK/mysql.$NAME.$DBBKP.* -r --sort=time|head -1)
echo "o arquivo [ $OLDFILE ] esta sendo removido, o script deve manter apenas os ultimos $NB dumps no filesystem ..." | tee -a $LN
rm $OLDFILE
else
echo nao existem dumps do banco [ $DBBKP ] a serem removidos, existem menos de $NB dumps deste banco no filesystem ... |tee -a $LN
fi
done
done
# calculando espaço em disco usado pelos dumps
DUMPSTOTALDISKSIZE=$(du -sh $BK| awk '{ print $1 }')
echo -e "\nEspaço em disco ocupado pelos dumps é $DUMPSTOTALDISKSIZE...\n"|tee -a $LN
# calculando numero total de arquivos de dump
DUMPSTOTALFILES=$(ls $BK|wc -l)
echo -e "Numero total de arquivos de dump é $DUMPSTOTALFILES...\n"|tee -a $LN
# fim da rotina
echo -e "Rotina de dumps finalizanda em $(date +%Y%m%d.%H%M%S)...\n"|tee -a $LN
# verificando se houve algum erro
if [ -e $LR ];then
if [ -s $LR ];then
echo -e "Dectectei algum erro durante o dump, por favor verifique o arquivo $LR...\n"|tee -a $LN
# enviando relatorio de erro
if [ $SEND_ERROR_MAIL == "YES" ];then
echo -e "Enviando relatorio do erros para $ERROR_MAIL ...\n" |tee -a $LN
mail -s "mysqldump, erro detectado durante a rotina de dumps" $ERROR_MAIL < $LR
fi
else
rm $LR
fi
fi
# relatorio do dump
if [ $SEND_REPORT_MAIL == "YES" ];then
echo -e "Enviando relatorio de dumps para $REPORT_MAIL ...\n" |tee -a $LN
$MAILX -s "mysqldump, log de dumps de bancos mysql-ppl" $REPORT_MAIL < $LN
fi
}
### case ##########################
case $1 in
start|iniciar)
backup
;;
clearlogs)
rm -rf $BK/*
;;
cleardumps)
rm -rf $BL/*
;;
clearall)
rm -rf $BK/*
rm -rf $BL/*
;;
*)
echo "./mydumps {start|clearlogs|cleardumps}"
exit 1
;;
esac
exit 0