aboutsummaryrefslogtreecommitdiff
path: root/handlers/mysql.helper.in
blob: 997f73c0a8ebe4bf40c0e02f5de6e6859a818901 (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
218
# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
# vim: set filetype=sh sw=3 sts=3 expandtab autoindent:

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
}