blob: fb9f11d903e10cb3b72e1e39ef7f4f9b3d02f244 (
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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
|
# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
HELPERS="$HELPERS mysql:mysql_database_backup"
do_mysql_vserver() {
choose_one_vserver "$mysql_title"
[ $? = 0 ] || return 1
mysql_vsname="vsname = $REPLY"
}
do_mysql_databases() {
REPLY=
while [ -z "$REPLY" ]; do
formBegin "$mysql_title: databases"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formDisplay
[ $? = 0 ] || return 1
mysql_databases="databases = "
for i in $REPLY; do
[ -n "$i" ] && mysql_databases="$mysql_databases $i"
done
done
}
do_mysql_password() {
inputBox "$mysql_title" "specify a mysql user:"
[ $? = 1 ] && return
user=$REPLY
inputBox "$mysql_title" "specify the mysql user's password:"
[ $? = 1 ] && return
password=$REPLY
do_mysql_final "dbusername = $user\ndbpassword = $password"
}
do_mysql_debian() {
_DISABLE_HOTCOPY=yes
do_mysql_final "configfile = /etc/mysql/debian.cnf"
}
do_mysql_user() {
inputBox "$mysql_title" "what system user does mysql backup use?"
[ $? = 1 ] && return
do_mysql_final "user = $REPLY"
}
do_mysql_final() {
if [ -z "$_DISABLE_HOTCOPY" ]; then
checkBox "$mysql_title" "check options" \
"sqldump" "create a backup using mysqldump (more compat)." no \
"hotcopy" "create a backup using mysqlhotcopy (faster)." yes \
"compress" "compress the sql output files" yes
status=$?
sqldump="sqldump = no"
hotcopy="hotcopy = no"
else
checkBox "$mysql_title" "check options" \
"compress" "compress the sql output files" yes
status=$?
sqldump="sqldump = yes"
hotcopy="hotcopy = no"
fi
[ $status = 1 ] && return;
result="$REPLY"
compress="compress = no"
for opt in $result; do
case $opt in
'"sqldump"') sqldump="sqldump = yes";;
'"hotcopy"') hotcopy="hotcopy = yes";;
'"compress"') compress="compress = yes";;
esac
done
get_next_filename $configdirectory/20.mysql
cat >> $next_filename <<EOF
### backupninja MySQL config file ###
# hotcopy = < yes | no > (default = no)
# make a backup of the actual database binary files using mysqlhotcopy.
$hotcopy
# sqldump = < yes | no > (default = no)
# make a backup using mysqldump. this creates text files with sql commands
# sufficient to recontruct the database.
#
$sqldump
# sqldumpoptions = <options>
# (default = --lock-tables --complete-insert --add-drop-table --quick --quote-names)
# arguments to pass to mysqldump
# sqldumpoptions = --add-drop-table --quick --quote-names
# compress = < yes | no > (default = yes)
# if yes, compress the sqldump output.
$compress
# dbhost = <host> (default = localhost)
EOF
cat >> $next_filename <<EOF
# backupdir = <dir> (default: /var/backups/mysql)
# where to dump the backups. hotcopy backups will be in a subdirectory
# 'hotcopy' and sqldump backups will be in a subdirectory 'sqldump'
$mysql_backupdir
# databases = <all | db1 db2 db3 > (default = all)
# which databases to backup. should either be the word 'all' or a
# space separated list of database names.
$mysql_databases
EOF
if [ $host_or_vservers == vservers ]
then
cat >> $next_filename <<EOF
#
# vsname = <vserver> (no default)
# vsname indicates which vserver to operate on, this is only used if
# vserver is set to yes in /etc/backupninja.conf
# NOTE: if you do not specify a vsname the host will be operated on
# alsoNOTE: if operating on a vserver, $VROOTDIR will be
# prepended to backupdir.
EOF
echo -e "$mysql_vsname\n" >> $next_filename
fi
echo -e $@ >> $next_filename
chmod 600 $next_filename
}
mysql_wizard() {
# Global variables
mysql_title="MySQL action wizard"
# backup the host system or a Vserver?
choose_host_or_one_vserver "$mysql_title"
[ $? = 0 ] || return 1
if [ $host_or_vservers == vservers ]
then
do_mysql_vserver
[ $? = 0 ] || return 1
fi
# backupdir
if [ $host_or_vservers == vservers ]
then
inputBox "$mysql_title" "Directory where to store the backups:`echo \"\n(Relative to chosen vserver's root directory)\"`" "/var/backups/mysql"
else
inputBox "$mysql_title" "Directory where to store the backups" "/var/backups/mysql"
fi
[ $? = 1 ] && return
mysql_backupdir="backupdir = $REPLY"
# databases
booleanBox "$mysql_title" "Do you want to backup all of the databases? `echo \"\n\nIf not, you'll be offered to choose individual databases to backup.\"`"
if [ $? = 0 ]; then
mysql_databases="databases = all"
else
do_mysql_databases
[ $? = 0 ] || return 1
fi
while true; do
_DISABLE_HOTCOPY=
menuBoxHelpFile "$mysql_title" "choose a mysql authentication method:" \
user "change to a linux user first." \
password "manually specify mysql user and password." \
debian "use default mysql user debian-sys-maint."
status=$?
if [ $status = 2 ]; then
# show help.
helptmp="/tmp/backupninja.help.$$"
cat > $helptmp <<EOF
To connect to mysql, backupninja must authenticate.
There are three possible authentication methods:
USER
With this method, you specify a system user. Backupninja will
then become this user before running mysqldump or mysqlhotcopy.
The result is that ~/.my.cnf is used for authentication.
PASSWORD
With this method, you manually specify a mysql user and
password in the backup action configuration.
DEBIAN
With this method, we use the debian-sys-maint user which is
already defined in /etc/mysql/debian.cnf. If you are running
debian, this is recommended, because no further configuration
is needed. The drawback is that this is incompatible with
mysqlhotcopy: you must use mysqldump.
EOF
dialog --textbox $helptmp 0 0
rm $helptmp
fi
[ $status = 1 ] && return;
result="$REPLY"
case "$result" in
"user") do_mysql_user;return;;
"password") do_mysql_password;return;;
"debian") do_mysql_debian;return;;
esac
done
}
|