blob: 8283ba4a00ac86add0dcbcf42a4d7617f3d02222 (
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
#
# mysql handler script for backupninja
#
getconf backupdir /var/backups/mysql
getconf configfile /etc/mysql/debian.cnf
getconf databases all
getconf compress yes
getconf dbusername
getconf dbpassword
getconf dbhost localhost
getconf hotcopy yes
getconf sqldump no
getconf user root
getconf vsname
# If vservers are configured, decide if the handler should
# use them or if it should just operate on the host
if [ "$VSERVERS" = "yes" ]
then
if [ ! -z $vsname ]
then
info "Using vserver '$vsname'"
usevserver=1
else
info "No vserver name specified, actions will be performed on the host"
fi
fi
# Check to make sure that the specified vserver exists
if [ $usevserver ]
then
vroot="$VROOTDIR/$vsname"
[ -d $vroot ] || fatal "vserver '$vsname' does not exist at '$vroot'"
fi
# create backup dirs, the vroot variable will be empty if no vsname was specified
# and will proceed to operate on the host
[ -d $vroot$backupdir ] || mkdir -p $vroot$backupdir
[ -d $vroot$backupdir ] || fatal "Backup directory '$vroot$backupdir'"
hotdir="$backupdir/hotcopy"
dumpdir="$backupdir/sqldump"
if [ $usevserver ]
then
[ "$sqldump" == "no" -o -d $vroot$dumpdir ] || $VSERVER $vsname exec mkdir -p $dumpdir
[ "$hotcopy" == "no" -o -d $vroot$hotdir ] || $VSERVER $vsname exec mkdir -p $hotdir
else
[ "$sqldump" == "no" -o -d $dumpdir ] || mkdir -p $dumpdir
[ "$hotcopy" == "no" -o -d $hotdir ] || mkdir -p $hotdir
fi
# create .my.cnf
# only if dbusername and dbpassword specified.
# we create a tmp file because we don't want to have to
# specify the password on the command line.
defaultsfile=""
if [ "$dbusername" != "" -a "$dbpassword" != "" ]; then
mycnf="/tmp/backupninja.$$.my.cnf"
if [ -f $mycnf ]; then
debug "rm $mycnf"
rm $mycnf
fi
oldmask=`umask`
umask 077
cat > $mycnf <<EOF
# auto generated backupninja mysql conf
[mysql]
user=$dbusername
password=$dbpassword
[mysqldump]
user=$dbusername
password=$dbpassword
[mysqlhotcopy]
user=$dbusername
password=$dbpassword
EOF
umask $oldmask
defaultsfile="--defaults-file $mycnf"
else
# otherwise, use $configfile
defaultsfile="--defaults-file $configfile"
fi
## HOT COPY
if [ "$hotcopy" == "yes" ]; then
if [ "$databases" == "all" ]; then
if [ $usevserver ]
then
execstr="$VSERVER $vsname exec $MYSQLHOTCOPY $defaultsfile --quiet --allowold --regexp /.\*/./.\*/ $hotdir"
else
execstr="$MYSQLHOTCOPY $defaultsfile --quiet --allowold --regexp /.\*/./.\*/ $hotdir"
fi
debug "su $user -c '$execstr'"
if [ ! $test ]; then
output=`su $user -c "$execstr" 2>&1`
code=$?
if [ "$code" == "0" ]; then
debug $output
info "Successfully finished hotcopy of all mysql databases"
else
warning $output
warning "Failed to hotcopy all mysql databases"
fi
fi
else
for db in $databases; do
if [ $usevserver ]
then
execstr="$VSERVER $vsname exec $MYSQLHOTCOPY $defaultsfile --allowold $db $hotdir"
else
execstr="$MYSQLHOTCOPY $defaultsfile --allowold $db $hotdir"
fi
debug "su $user -c '$execstr'"
if [ ! $test ]; then
output=`su $user -c "$execstr" 2>&1`
code=$?
if [ "$code" == "0" ]; then
debug $output
info "Successfully finished hotcopy of mysql database $db"
else
warning $output
warning "Failed to hotcopy mysql database $db"
fi
fi
done
fi
fi
## SQL DUMP
if [ "$sqldump" == "yes" ]; then
if [ "$databases" == "all" ]; then
if [ $usevserver ]
then
databases=`echo 'show databases' | $VSERVER $vsname exec su $user -c "$MYSQL $defaultsfile" | grep -v Database`
else
databases=`echo 'show databases' | su $user -c "$MYSQL $defaultsfile" | grep -v Database`
fi
fi
for db in $databases; do
if [ $usevserver ]
then
execstr="$VSERVER $vsname exec $MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names $db > $vroot$dumpdir/${db}.sql"
else
execstr="$MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names $db > $dumpdir/${db}.sql"
fi
debug "su $user -c '$execstr'"
if [ ! $test ]; then
output=`su $user -c "$execstr" 2>&1`
code=$?
if [ "$code" == "0" ]; then
debug $output
info "Successfully finished dump of mysql database $db"
else
warning $output
warning "Failed to dump mysql databases $db"
fi
fi
done
if [ "$compress" == "yes" ]; then
output=`$GZIP -f $vroot$dumpdir/*.sql 2>&1`
debug $output
fi
fi
# clean up tmp config file
if [ -f "$mycnf" ]; then
debug "rm $mycnf"
rm $mycnf
fi
return 0
|