Check_MySQL_Backups mysql_dir backup_dir temp_file tmp tmp_old_file da

 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
Check_MySQL_Backups() {
mysql_dir="$1"
backup_dir="$2"
temp_file="/tmp/.tmp_old_file.`date +%s`"
[ -z "`ls -1 "$backup_dir" | grep \.bz2$`" ] && return 1
[ ! -f "${mysql_dir}/ibdata1" ] && return 4
touch -d "-1 days" "$temp_file"
valid_backup_date_flag=0
# Определяем размер таблиц MySQL в мегабайтах.
# Запрос на базу может не пройти. В этом случае пытаемся определить размер ibdata1.
# Вообще предполагается, что "живость" СУБД проверяется до этого в Check_MySQL_Daemon
tables_size="`echo "show table status" | mysql -udbowner -p"${4}" pvd 2>/dev/null| awk 'BEGIN {size=0;}
{if ($0 ~ /InnoDB/) size+=$7; }
END {printf("%d\n", size/(1024*1024));}'`"
[ -z "$tables_size" ] && tables_size="`du -smL "${mysql_dir}/ibdata1" | awk '{print $1}'`"
for i in ${backup_dir}/*bz2; do
backup_status="`ls -lF "$i" | awk -v ibdata_size="$tables_size" -v thr="$3" '{
file_size = $5;
if (file_size == 0) {
print "FAIL";
exit;
}
if (ibdata1_size / file_size > thr) {
print "FAIL";
exit;
}
else print "OK";
}'`"
if [ "$backup_status" == "FAIL" ]; then
rm -f "$temp_file"
return 2
fi
[ "$i" -nt "$temp_file" ] && ((valid_backup_date_flag++)) # если файл более новый, чем сутки, то +1 счетчику
done
rm -f "$temp_file"
((valid_backup_date_flag == 0)) && return 3 # все бэкапы более старые, чем сутки
return 0
}