-
Notifications
You must be signed in to change notification settings - Fork 0
/
backup_config.sh
168 lines (144 loc) · 6.32 KB
/
backup_config.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
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
#!/bin/bash
# Скрипт создания резервной копии конфигурации сервера
# Разработал Антон Захаров [email protected]
################
# КОНФИГУРАЦИЯ #
################
# Параметры подключения к серверу бэкапов по SAMBA
BSAMBAHOST=""
BSAMBAUSER=""
BSAMBAPASS=""
# Пути к директориям (через пробел), которые будем бэкапить
BPATHS=""
# Пути к файлам (через пробел), которые будем бэкапить
BFILES=""
# Параметры подключения к MySQL
BMYSQLUSER=""
BMYSQLPASSWORD=""
# Параметры подключения к PostgreSQL
BPSQLUSER="postgres"
BPSQLDATABASE=""
# Параметры отправки уведомления на e-mail
FROMMAIL=""
NOTIFYMAIL=""
SMTPHOST=""
#################
# НАЧАЛО БЭКАПА #
#################
# Инициализируем переменные
BLOG="/var/log/backup.log"
BSERVERNAME=`hostname`
BDATEFORMAT=`date +%Y%m%d`
# Вывод всех сообщений в лог
exec 3>&1 4>&2 >>$BLOG 2>&1
echo `date` 'Начало резервирования' $BSERVERNAME
# Проверяем наличие SAMBA клиента
BSAMBACMD=`whereis smbclient | awk '{print $2}'`
if [ ! -f $BSAMBACMD ]; then
echo `date` 'SAMBA клиент в системе не обнаружен. Установите smbclient.'
exit
fi
# Создание временной директории с резервной копией
BTEMPDIR=/tmp/$BDATEFORMAT
mkdir -p $BTEMPDIR
chmod 777 $BTEMPDIR
cd $BTEMPDIR
if [ ! -z "$BPATHS" ]; then
# Дамп директорий
i=1
for CURRDIR in $BPATHS; do
echo `date` 'Копирую директорию' $CURRDIR
echo "$i : $CURRDIR" >> paths.log
tar cf $BTEMPDIR/$BSERVERNAME-$i-$BDATEFORMAT.tar $CURRDIR --recursion
i=`expr $i + 1`
done
fi
if [ ! -z "$BFILES" ]; then
# Дамп файлов
i=1
for CURRFILE in $BFILES; do
echo `date` 'Копирую файл' $CURRFILE
echo "$i : $CURRFILE" >> paths.log
cp $CURRFILE $BTEMPDIR/
i=`expr $i + 1`
done
fi
# Дамп базы данных MySQL, если запущен сервис
if [ -f /var/run/mysqld/mysqld.pid ]; then
echo `date` "Обнаружен PID файл MySQL. Сохраняем все базы данных."
DATABASESLIST=`echo 'SHOW DATABASES' | mysql -u$BMYSQLUSER -p$BMYSQLPASSWORD | egrep -v '(Database|information_schema|mysql|performance_schema|test)'`
for DATABASE in $DATABASESLIST; do
echo `date` 'Делаю дамп базы' $DATABASE
mysqldump -u$BMYSQLUSER -p$BMYSQLPASSWORD $DATABASE > $BTEMPDIR/$BSERVERNAME-$DATABASE-$BDATEFORMAT.sql
echo `date` 'Сжимаю дамп базы' $DATABASE
gzip -9 $BTEMPDIR/$BSERVERNAME-$DATABASE-$BDATEFORMAT.sql
done
echo `date` "Сохранение баз MySQL завершено."
fi
# Дамп базы данных PostgreSQL, если установлен pg_dump и указано имя базы
PSQLDUMPBIN=`whereis pg_dump | awk '{print $2}'`
if [ -f $PSQLDUMPBIN ]; then
echo `date` 'Обнаружен pg_dump. Сохраняем базы данных.'
if [ ! -z "$BPSQLDATABASE" ]; then
for DATABASE in $BPSQLDATABASE; do
echo `date` 'Делаю дамп базы' $DATABASE
sudo -u postgres $PSQLDUMPBIN -f $BTEMPDIR/$BSERVERNAME-$DATABASE-$BDATEFORMAT.sql $DATABASE
echo `date` 'Сжимаю дамп базы' $DATABASE
gzip -9 $BTEMPDIR/$BSERVERNAME-$DATABASE-$BDATEFORMAT.sql
done
echo `date` "Сохранение баз PostgreSQL завершено."
fi
fi
# Сжимаем конечный архив
echo `date` 'Сжимаю архив' $BSERVERNAME-$BDATEFORMAT.tar.gz
cd $BTEMPDIR
tar cfz ../$BSERVERNAME-$BDATEFORMAT.tar.gz .
cd ..
if [ -f $BSERVERNAME-$BDATEFORMAT.tar.gz ]; then
echo `date` 'Удаляю временные файлы после бэкапа'
rm -rf /tmp/$BDATEFORMAT
fi
# Сохраняем архив на ресурсе SAMBA
if [ ! -z "$BSAMBAHOST" ]; then
BSAMBASHARE="//$BSAMBAHOST/$BSAMBAUSER"
echo `date` 'Сохраняю' $BSERVERNAME-$BDATEFORMAT.tar.gz 'на' $BSAMBASHARE
if [ "$BSAMBAUSER" = "" ]; then
BSAMBAUSER='Guest'
fi
if [ "$BSAMBAPASS" = "" ]; then
BSAMBAUSER="$BSAMBAUSER --no-pass"
fi
# Вынесено без ТАБов. Копирование на внешний ресурс
smbclient $BSAMBASHARE --timeout=60 -U $BSAMBAUSER $BSAMBAPASS<<EOC
put $BSERVERNAME-$BDATEFORMAT.tar.gz
EOC
# Конец копирования на SAMBA
# Удаляю локальный файл бэкапа
if [ -f $BSERVERNAME-$BDATEFORMAT.tar.gz ]; then
echo `date` 'Удаляю локальный файл бэкапа'
rm /tmp/$BSERVERNAME-$BDATEFORMAT.tar.gz
fi
fi
# Отправляем нотификацию о выполненной работе
SENDEMAILBIN=`whereis sendEmail | awk '{print $2}'`
if [ -f $SENDEMAILBIN ]; then
if [ ! -z "$NOTIFYMAIL" ]; then
if [ ! -z "$FROMMAIL" ]; then
if [ ! -z "$SMTPHOST" ]; then
echo `date` 'Отправляю уведомление о выполненной работе на ' $NOTIFYMAIL ' через ' $SMTPHOST
NOTIFYMSG="Резервное копирование на сервере $BSERVERNAME выполнено в файл $BSERVERNAME-$BDATEFORMAT.tar.gz."
$SENDEMAILBIN -o timeout=10 -f $FROMMAIL -t $NOTIFYMAIL -u "Резервное копирование $BSERVERNAME" -m "$NOTIFYMSG" -s $SMTPHOST
else
echo `date` 'Уведомление о выполненной работе не отправлено. Не указан SMTP сервер.'
fi
else
echo `date` 'Уведомление о выполненной работе не отправлено. Не указан адрес отправителя.'
fi
else
echo `date` 'Уведомление о выполненной работе не отправлено. Не указан адрес получателя.'
fi
fi
echo `date` 'Работа завершена'
# Возврат вывода всех сообщений
exec 1>&3 2>&4
exit