-
Notifications
You must be signed in to change notification settings - Fork 6
/
Backup_MySQL.sh
114 lines (101 loc) · 4.23 KB
/
Backup_MySQL.sh
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
#!/bin/bash
#
# MySQL_Backup
#
# Copyright (C) 2015 Allan Moraes <[email protected]> <www.mysqlbox.com.br>
#
# Este programa e um software livre; voce pode redistribui-lo e / ou modifica-lo
# sob os termos da GNU General Public License como publicado pela
# Free Software Foundation; tanto a versao 3 da Licenca, ou
# (A seu critério) qualquer versao posterior.
#
# Este programa a distribuido para ajudar todos DBA,
# mas SEM QUALQUER GARANTIA; mesmo sem a garantia implicita de
# COMERCIALIZACAO ou ADEQUACAO A UM DETERMINADO FIM. veja a
# GNU General Public License para mais detalhes.
#
# Voce deve ter recebido uma copia da Licença Publica Geral GNU
# junto com este programa; se nao, escreva para a Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, EUA.
###Parametros do script###
BACKUP_NAME="backup-`hostname`-`date +%d_%m_%Y`" #Nome que ficara o backup. Ex: backup-SERVER01-01_12_2015
BACKUP_PATH="/usr/local/bin/MySQL-Backup" #Local do diretorio do script
BACKUP_TEMP="$BACKUP_PATH/tmp" #Local temporario dos backups
BACKUP_SHELL="$BACKUP_PATH/Backup_MySQL.sh" #Shell do backup
REMOTE_FILE="/" #Diretorio Remoto (Drop Box)
PERMISSIONS=`stat -c %a $BACKUP_SHELL 2>&1` #Pega as permissoes do shell
DROPBOX_PATH="/usr/local/bin/Dropbox-Uploader" #Local de instalacao do Dropbox-Uploader
DROPBOX_FILE="$DROPBOX_PATH/dropbox_uploader.sh" #Local do Dropbox-Uploader.sh
IGNORED_DB="information_schema|performance_schema" #Bancos ignorados pela rotina do backup separados por pipe (|)
LOG_FILE="/var/log/mysql-backup.log" #Local dos logs
USER="" #Usuario do backup
SECRET="" #Senha do usuario
###Nao editar abaixo###
#Verifica se o nome do backup nao e nulo
if [ -z $BACKUP_NAME ]; then
echo -e "\n\tERRO: Variavel BACKUP_NAME contem valor nulo"
echo "`date` - ERRO: Variavel BACKUP_NAME contem valor nulo" >> $LOG_FILE
#exit 1
fi
#Verifica se o local configurado esta correto
if [ ! -d $BACKUP_PATH ]; then
echo -e "\n\tERRO: Variavel BACKUP_PATH esta incorreta, o local de instalacao nao existe"
echo "`date` - ERRO: Variavel BACKUP_PATH esta incorreta, o local de instalacao nao existe" >> $LOG_FILE
##exit 1
fi
#Verifica se o local temporario existe
if [ ! -d $BACKUP_TEMP ]; then
echo -e "\n\tERRO: Variavel BACKUP_TEMP esta incorreta, o local de backup nao existe"
echo "`date` - ERRO: Variavel BACKUP_TEMP esta incorreta, o local de backup nao existe" >> $LOG_FILE
#exit 1
fi
if [ ! -f $BACKUP_SHELL ]; then
echo -e "\n\tERRO: O shell MySQL_Backup.sh nao foi encontrado"
echo "`date` - ERRO: O shell MySQL_Backup.sh nao foi encontrado" >> $LOG_FILE
#exit 1
fi
#Verifica se a permissao do shell esta correta
if [ $PERMISSIONS != "700" ]; then
echo -e "\n\tERRO: Permissao do arquivo $BACKUP_SHELL incorreta! Permissao deve ser 700"
echo "`date` - ERRO: Permissao do arquivo $BACKUP_SHELL incorreta! Permissao deve ser 700" >> $LOG_FILE
#exit 1
fi
#Verifica se o local do Dropbox-Uploader esta correto
if [ ! -f $DROPBOX_FILE ]; then
echo -e "\n\tERRO: Variavel DROPBOX_FILE esta incorreta, o local informado do Dropbox-Uploader nao existe"
echo "`date` - ERRO: Variavel DROPBOX_FILE esta incorreta, o local informado do Dropbox-Uploader nao existe" >> $LOG_FILE
#exit 1
fi
#Verifica se o usuario nao e nulo
if [ -z $USER ]; then
echo -e "\n\tERRO: Usuario nao configurado"
echo "`date` - ERRO: Usuario nao configurado" >> $LOG_FILE
#exit 1
fi
#Verifica se a senha nao e nula
if [ -z $SECRET ]; then
echo -e "\n\tERRO: A senha do usuario $USER nao foi fornecida"
echo "`date` - ERRO: A senha do usuario $USER nao foi fornecida" >> $LOG_FILE
#exit 1
fi
#Funcao que consulta todos os bancos do seu servidor e faz o backup
GetDatabases(){
for DB in `mysql -u$USER -p$SECRET -e "SHOW DATABASES"|egrep -vi 'Database|'$IGNORED_DB`; do
echo "`date` - Fazendo backup do banco $DB"
mysqldump -u$USER -p$SECRET $DB > $BACKUP_TEMP/$DB.sql
done
}
#Funcao que compact dos backups
ZipDatabases(){
cd $BACKUP_TEMP
tar -czf $BACKUP_NAME.tar.gz *.sql
}
#Funca que faz o upload do backup
UploadDatabases(){
$DROPBOX_FILE upload $BACKUP_TEMP/*.tar.gz $REMOTE_FILE >> $LOG_FILE 2>&1
rm -rf $BACKUP_TEMP/*
}
#Executa o Backup
GetDatabases >> $LOG_FILE 2>&1
ZipDatabases
UploadDatabases