-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackup_mysql.sh
executable file
·71 lines (57 loc) · 1.75 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
#!/bin/bash
# Very simple mysql database backup with retention
# 03/2014, tomas(at)novotny.cz
# SPDX-License-Identifier: WTFPL
# ###
# Load configuration
# ###
export SCRIPT_WORKDIR="$( cd "$( dirname "$0" )" && pwd )"
cd "${SCRIPT_WORKDIR}"
. ./config.sh
# ###
# Local configuration
# ###
backup_name=`date +%y%m%d-%H%M%S`_`hostname -s`_mysql.bak
export LC_ALL=C
export LANG=en
# ###
# Functions
# ###
function rotate_backups {
del_backup_dir=$1
keep_backups=$2
num_backups=`find $del_backup_dir/*_mysql.bak -size +$BACKUP_SIZE_MIN | wc -l`
if [ $num_backups -gt $keep_backups ]; then
num_to_delete=$(( $num_backups - $keep_backups))
echo "Info: $num_to_delete old backups will be deleted" >> $DEBUG_LOG
for del_file in `ls $del_backup_dir/*_mysql.bak | head -n $num_to_delete` ; do
echo "Deleting old backup: $del_file" >> $DEBUG_LOG
rm $del_file
done
else
echo "Info: Not enough old backups for remove yet" >> $DEBUG_LOG
fi
}
# ###
# Script itself
# ###
echo -n "Starting at " >> $DEBUG_LOG
date >> $DEBUG_LOG
/usr/bin/mysqldump -u ${DB_USER} -p${DB_PASSWORD} --all-databases > $BACKUP_DIR/$backup_name 2>>$DEBUG_LOG
# Check backup size
if [ ! -s /var/backup/mysql/$backup_name ]; then
echo "Error: Backup has zero size, exiting" >> $DEBUG_LOG
exit 1
else
echo "Info: Backup has non-zero size" >> $DEBUG_LOG
fi
# Move to monthly backup (if not exists)
oldest_month=$(ls $BACKUP_DIR_MONTHLY/$(date +%y%m)* 2>/dev/null | head -n 1 2>/dev/null)
if [ ! -s "$oldest_month" ]; then
echo "Monthly backup doesn't exist, moving" >> $DEBUG_LOG
mv $BACKUP_DIR/$backup_name $BACKUP_DIR_MONTHLY/
fi
rotate_backups "$BACKUP_DIR" "$KEEP_DAY_BACKUPS"
rotate_backups "$BACKUP_DIR_MONTHLY" "$KEEP_MONTH_BACKUPS"
echo -n "Finished at " >> $DEBUG_LOG
date >> $DEBUG_LOG