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
|
# -*- 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
# 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
}
|