-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackup-script.sh
More file actions
60 lines (48 loc) · 1.82 KB
/
backup-script.sh
File metadata and controls
60 lines (48 loc) · 1.82 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
#!/bin/sh
DB_HOST=${DB_HOST:-mysql}
DB_PORT=${DB_PORT:-3306}
DB_USERNAME=${DB_USERNAME:-root}
DB_PASSWORD=${DB_PASSWORD:-rootpassword}
DB_DATABASE=${DB_DATABASE:-locatto}
BACKUP_INTERVAL=${BACKUP_INTERVAL:-900}
BACKUP_DIR="/backups"
BACKUP_RETENTION_DAYS=7
mkdir -p $BACKUP_DIR
create_backup() {
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="$BACKUP_DIR/${DB_DATABASE}_backup_$TIMESTAMP.sql"
echo "$(date '+%Y-%m-%d %H:%M:%S') - Creating backup: $BACKUP_FILE"
mysqldump -h$DB_HOST -P$DB_PORT -u$DB_USERNAME -p$DB_PASSWORD \
--single-transaction \
--routines \
--triggers \
--events \
--add-drop-database \
--databases $DB_DATABASE > $BACKUP_FILE
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - Backup completed successfully: $BACKUP_FILE"
gzip $BACKUP_FILE
echo "$(date '+%Y-%m-%d %H:%M:%S') - Backup compressed: ${BACKUP_FILE}.gz"
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - Backup failed!"
rm -f $BACKUP_FILE
fi
}
cleanup_old_backups() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - Cleaning up backups older than $BACKUP_RETENTION_DAYS days"
find $BACKUP_DIR -name "${DB_DATABASE}_backup_*.sql.gz" -type f -mtime +$BACKUP_RETENTION_DAYS -delete
BACKUP_COUNT=$(find $BACKUP_DIR -name "${DB_DATABASE}_backup_*.sql.gz" -type f | wc -l)
echo "$(date '+%Y-%m-%d %H:%M:%S') - Total backups: $BACKUP_COUNT"
}
echo "$(date '+%Y-%m-%d %H:%M:%S') - Waiting for database to be ready..."
while ! mysqladmin ping -h$DB_HOST -P$DB_PORT -u$DB_USERNAME -p$DB_PASSWORD --silent; do
sleep 2
done
echo "$(date '+%Y-%m-%d %H:%M:%S') - Database is ready, starting backup service"
create_backup
cleanup_old_backups
while true; do
sleep $BACKUP_INTERVAL
create_backup
cleanup_old_backups
done