summaryrefslogtreecommitdiffstats
path: root/mysql/clean_backups.sh
blob: a0e60af787c70391909a437e3bc064f1d019d817 (plain) (blame)
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
#!/bin/bash

source $(dirname $0)/ftp.settings

last_day=0
last_month=0
last_year=0

two_years_ago_y=$(date -d '-2years' +%Y)
two_years_ago_m=$(date -d '-2years' +%m)

six_months_ago_y=$(date -d '-6month' +%Y)
six_months_ago_m=$(date -d '-6month' +%m)

one_month_ago_y=$(date -d '-1month' +%Y)
one_month_ago_m=$(date -d '-1month' +%m)
one_month_ago_d=$(date -d '-1month' +%d)

ncftpls -u"${FTP_USER}" -p"${FTP_PASSWORD}" "ftp://${FTP_SERVER}/${FTP_TARGET}/" | \
  sed -nr 's/(^.*)([0-9]{4})-([0-9]{2})-([0-9]{2}).*/\2\t\3\t\4 \1/gp' | \
  sort -n | uniq | awk -F'\t' '{ print $1" "$2" "$3}' | while read y m d name
do

	# older than 2 years, only keep 1 per month

	if [ $y -lt $two_years_ago_y -o \
	     \( $y -eq $two_years_ago_y -a $m -lt $two_years_ago_m \) ]; then
		if [ $last_month -eq $m ]; then

			ncftp -u"${FTP_USER}" \
			  -p"${FTP_PASSWORD}" \
			  "ftp://${FTP_SERVER}/${FTP_TARGET}/" >/dev/null <<EOF
rm "${name}${y}-${m}-${d}"*
quit
EOF
			echo ${name}$y-$m-$d

		else
			last_day=$d
			last_month=$m
			last_year=$y
		fi
	else

		# older than 6 months, only keep every 14 days

		if [ $y -lt $six_months_ago_y -o \
		     \( $y -eq $six_months_ago_y -a \
		        $((10#$m)) -lt $((10#$six_months_ago_m)) \) ]; then

			fourteen_days_ago_y=$(date -d "$y-$m-$d -13days" +%Y)
			fourteen_days_ago_m=$(date -d "$y-$m-$d -13days" +%m)
			fourteen_days_ago_d=$(date -d "$y-$m-$d -13days" +%d)

			if [ $last_year -gt $fourteen_days_ago_y -o \
			     \( $last_year -eq $fourteen_days_ago_y -a \
			        $((10#$last_month)) -gt \
			          $((10#$fourteen_days_ago_m)) \) -o \
			     \( $last_year -eq $fourteen_days_ago_y -a \
			        $((10#$last_month)) -eq \
			          $((10#$fourteen_days_ago_m)) -a \
			        $((10#$last_day)) -ge \
			          $((10#$fourteen_days_ago_d)) \) ]; then

				ncftp -u"${FTP_USER}" \
				  -p"${FTP_PASSWORD}" \
				  "ftp://${FTP_SERVER}/${FTP_TARGET}/" >/dev/null <<EOF
rm "${name}${y}-${m}-${d}"*
quit
EOF
				echo ${name}$y-$m-$d

			else
				last_day=$d
				last_month=$m
				last_year=$y
			fi
		else

			# older than 1 month, keep weekly

			if [ $y -lt $one_month_ago_y -o \
			     \( $y -eq $one_month_ago_y -a \
			        $((10#$m)) -lt \
			          $((10#$one_month_ago_m)) \) -o \
			     \( $y -eq $one_month_ago_y -a \
			        $((10#$m)) -eq \
			          $((10#$one_month_ago_m)) -a \
			        $((10#$d)) -lt \
			          $((10#$one_month_ago_d)) \) ]; then


				seven_days_ago_y=$(date -d "$y-$m-$d -6days" +%Y)
				seven_days_ago_m=$(date -d "$y-$m-$d -6days" +%m)
				seven_days_ago_d=$(date -d "$y-$m-$d -6days" +%d)

				if [ $last_year -gt $seven_days_ago_y -o \
				     \( $last_year -eq $seven_days_ago_y -a \
				        $((10#$last_month)) -gt \
				          $((10#$seven_days_ago_m)) \) -o \
				     \( $last_year -eq $seven_days_ago_y -a \
				        $((10#$last_month)) -eq \
				          $((10#$seven_days_ago_m)) -a \
				        $((10#$last_day)) -ge \
				          $((10#$seven_days_ago_d)) \) ]; then


					ncftp -u"${FTP_USER}" \
					  -p"${FTP_PASSWORD}" \
					  "ftp://${FTP_SERVER}/${FTP_TARGET}/" \
					  >/dev/null <<EOF
rm "${name}${y}-${m}-${d}"*
quit
EOF
					echo ${name}$y-$m-$d

				else
					last_day=$d
					last_month=$m
					last_year=$y
				fi
			fi
		fi
	fi
done