-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcabackup.sh
More file actions
executable file
·140 lines (137 loc) · 3.14 KB
/
cabackup.sh
File metadata and controls
executable file
·140 lines (137 loc) · 3.14 KB
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
#!/bin/bash
#
# ==== CaBackup ====
#
# Script para fazer backup simples, na base da cópia usando o cp
# Ele também faz o backup do MySQL
#
# Autor: CaSoft Tecnologia - Evaldo Junior <junior@casoft.info>
#
# Versão 1.0 - 06 de Out. de 2011
# Versão 1.1 - 14 de Out. de 2011
# - Backup do MySQL agora é opcional
# - Montagem de HD externa é opcional
# - Agora ele gera o log em um arquivo, opcional
# - Agora exibe o primeiro nível da estrutura dos diretórios sendo copiados
#
# Licença: GNU GPL v3 (http://www.gnu.org/licenses/gpl-3.0.txt)
#
########################################
# Config #
# Faça as adaptações do script aqui #
########################################
#
# Opção de saída na tela, use 0 para não ter saída na tela
#
SAIDA_NA_TELA=1
#
# Dados do MySQL
# Deixe o HOST em branco para não copiar o MySQL
#
MYSQL_HOST="localhost"
MYSQL_USER="root"
MYSQL_PASS="root"
#
# Origens do backup, quais diretórios
# serão copiados?
# Separe os diretórios com espaços
# isso é um array do bash, siga o padrão
#
# !!! ATENÇÃO !!!
# Não deixe uma barra ao final do caminho!
#
ORIGENS=( "/opt" "/var/www" )
#
# Disco externo - Deixe em branco caso não use um disco externo
#
DISCO_EXTERNO="/dev/sdb1"
#
# Ponto de montagem - Deixe em branco caso não use um disco externo
#
PONTO_MONTAGEM="/mnt/backup"
#
# Onde o backup será gravado?
# Sempre DEIXE uma barra no nome do diretório
#
DESTINO="/mnt/backup/backup/"
#
# Arquivo para gravar o log. Deixa em branco para não ter log.
#
ARQUIVO_LOG="/tmp/meulog.txt"
#
########################################
# Fim do Config #
# Só altere daqui para baixo se souber #
# o que está fazendo #
########################################
#
# Esta função exibe a mensagem na tela e grava o log
#
function log_mensagem {
if [ ! $SAIDA_NA_TELA -eq 0 ]
then
echo $1
fi
if [ -n "$ARQUIVO_LOG" ]
then
echo $1 >> "$ARQUIVO_LOG"
fi
}
#
# Data do backup
#
DATA=`date +%Y%m%d`
#
# Agora começa
#
log_mensagem "Iniciando o backup de $DATA"
#
# Foi definido um disco externo? Então monta
#
if [ -n "$DISCO_EXTERNO" ]
then
log_mensagem "Montando disco externo"
mount "$DISCO_EXTERNO" "$PONTO_MONTAGEM"
fi
#
# Auxiliares
#
BIN_MYSQLDUMP=`which mysqldump`
#
# O diretório de destino existe? Não? Então crie-o, ué.
if [ ! -d "$DESTINO$DATA" ]
then
mkdir -p "$DESTINO$DATA"
fi
#
# Começando o backup!
#
for origem in "${ORIGENS[@]}"
do
NOME_DIR=${origem##*/}
DEST="$DESTINO$DATA/$NOME_DIR"
for sub in $(ls "$origem")
do
log_mensagem "Copiando $origem/$sub..."
cp -r "$origem/$sub" "$DEST"
log_mensagem "$origem/$sub copiado"
done
done
#
# Agora vamos ao MySQL
#
if [ -n $MYSQL_HOST ]
then
log_mensagem "Iniciando o backup do MySQL"
$BIN_MYSQLDUMP -u "$MYSQL_USER" -h "$MYSQL_HOST" --password="$MYSQL_PASS" --all-databases > "$DESTINO$DATA/backup_mysql.sql"
log_mensagem "Backup do MySQL completo"
fi
#
# Tem que desmontar?
#
if [ -n "$DISCO_EXTERNO" ]
then
log_mensagem "Desmontando o externo"
umount "$DESTINO"
fi
log_mensagem "Fim do script de backup"