blob: 02095708ba51810bc439b4f0fb841ffdfff7ff66 (
plain)
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
|
#!/bin/bash
# Setup environment for the backups website
function hydra_backup_environment_local_website {
NODE="$1"
SITE="$2"
BACKUPDIR="/var/sites/backups/site/$SITE/$NODE"
if [ -z "$SITE" ] || [ -z "$NODE" ]; then
hydra_action_usage
exit 1
fi
if [ ! -z "$DATE" ]; then
RESTOREDIR="$BACKUPDIR/$DATE"
else
RESTOREDIR="$BACKUPDIR/`date +%Y%m%d`"
fi
DB_DUMP_BASE="$RESTOREDIR"
mkdir -p $RESTOREDIR
}
# Setup environment for backup restored from localhost
function hydra_backup_environment_local {
BACKUPDIR="/var/backups/duplicity"
if [ ! -z "$DATE" ]; then
RESTOREDIR="/var/backups/restore/$DATE"
else
RESTOREDIR="/var/backups/restore/`date +%Y%m%d`"
fi
DB_DUMP_BASE="$RESTOREDIR/var/backups/mysql/sqldump/"
mkdir -p $RESTOREDIR
}
# Setup environment for backup restored from remote source
function hydra_backup_environment_remote {
NODE="$1"
METHOD="$2"
BACKUP_ROOT="/var/backups/remote"
DOMAIN="`facter domain`"
BACKUPDIR="$BACKUP_ROOT/$NODE.$DOMAIN"
if [ ! -z "$DATE" ]; then
RESTOREDIR="$BACKUPDIR/restore/$DATE"
else
RESTOREDIR="$BACKUPDIR/restore/`date +%Y%m%d`"
fi
if [ -z "$NODE" ]; then
hydra_action_usage
exit 1
fi
if [ ! -d "$BACKUPDIR" ]; then
echo "No backup found at $BACKUPDIR"
exit 1
fi
if [ -z "$METHOD" ]; then
if [ -d "$BACKUPDIR/rsync" ]; then
echo "Assuming rsync backup method"
BACKUPDIR="$BACKUPDIR/rsync/var/backups/duplicity/daily.1"
elif [ -d "$BACKUPDIR/rdiff" ]; then
echo "Assuming rdiff backup method"
BACKUPDIR="$BACKUPDIR/rdiff/var/backups/duplicity"
else
echo "Missing backup action"
exit 1
fi
else
if [ -d "$BACKUPDIR/$METHOD" ]; then
BACKUPDIR="$BACKUPDIR/$METHOD"
else
echo "Backup folder for $METHOD not found at $BACKUPDIR"
exit 1
fi
fi
if [ -d "$RESTOREDIR" ] && [ "$METHOD" != "restore" ]; then
echo "Restoration folder $RESTOREDIR already exists"
exit 1
fi
DB_DUMP_BASE="$RESTOREDIR/var/backups/mysql/sqldump/"
mkdir -p $RESTOREDIR
}
# Restore a database
function hydra_backup_restore_database {
DATABASE="$1"
if [ -z "$DATABASE" ]; then
return
fi
# Check if there are database dumps
if [ -f "$DB_DUMP_BASE/$DATABASE.sql.gz" ]; then
DB_DUMP_EXT=".gz"
DB_DUMP_EXTRACT="gunzip"
elif [ -f "$DB_DUMP_BASE/$DATABASE.sql.bz2" ]; then
DB_DUMP_EXT=".bz2"
DB_DUMP_EXTRACT="bunzip2"
elif [ -f "$DB_DUMP_BASE/$DATABASE.sql" ]; then
DB_DUMP_EXT=""
DB_DUMP_EXTRACT="true"
fi
# Restore database
if [ ! -z "$DB_DUMP_EXT" ]; then
echo "Restoring database $DATABASE..."
hydra_set_tmpfile $DATABASE -d
cp $DB_DUMP_BASE/$DATABASE.sql$DB_DUMP_EXT $TMPWORK
( cd $TMPWORK && $DB_DUMP_EXTRACT $DATABASE.sql$DB_DUMP_EXT )
hydra_truncate_database $DATABASE
mysql $DATABASE < $TMPWORK/$DATABASE.sql
hydra_unset_tmpfile $TMPWORK
else
echo "Database should be manually restored"
fi
}
|