zoneminder/scripts/zmdbrestore.in

173 lines
4.7 KiB
Plaintext
Raw Permalink Normal View History

#!/bin/bash
#===============================================================================
#
# FILE: zmdbrestore
#
# USAGE: ./zmdbrestore
#
# DESCRIPTION: Restore a ZoneMinder DB from a backup created by zm_db_backup
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: (),
# COMPANY:
# VERSION: 1.0
# CREATED: 05/29/2006 04:45:06 PM PDT
# REVISION: ---
#===============================================================================
ZM_CONFIG=@ZM_CONFIG@
ZM_BACKUP=/var/lib/zm/zm_backup.sql
EVENTS_DIR=events
loadcfg() {
if [ -f $ZM_CONFIG ]; then
. $ZM_CONFIG
else
echo "ERROR: $ZM_CONFIG not found."
exit 1
fi
}
chkcfg(){
for n in ZM_DB_HOST ZM_DB_NAME ZM_DB_USER ZM_DB_PASS; do
eval "val=\$$n"
if [ "$val" = "" ]; then
echo "ERROR($ZM_CONFIG): $n should not be empty."
echo "Enter a $n for ZM to use the Database."
if [ "$n" = "ZM_DB_PASS" ]; then
echo -n "Will not echo on screen $n : "
stty -echo # Turns off screen echo.
read newval
stty echo # Restores screen echo.
echo ""
### The following can be used to generate a random password
# randstr newval 16
else
echo -n "$n : "
read newval
fi
cp $ZM_CONFIG /tmp/$$ &&
sed 's/^'$n='.*$/'$n=$newval'/g' /tmp/$$ >$ZM_CONFIG
fi
done
if [ "$ZM_DB_HOST" = "localhost" ]
then
ClientHost=localhost
else
ClientHost=`hostname`
fi
}
reloadcfg(){
loadcfg
}
chk_backup_ver(){
if
[ -e $ZM_BACKUP ]
then
BACKUP_VER=$(cat $ZM_BACKUP | head -n 2 |tail -n 1 |cut -f 8 -d " ")
else
echo "$ZM_BACKUP doesn't exist"
exit 1
fi
if
[ $BACKUP_VER != $ZM_VERSION ]
then
echo "$ZM_BACKUP is from version $BACKUP_VER"
echo "ZoneMinder version is $ZM_VERSION"
exit 1
fi
}
getmylogin(){
echo "Enter MySQL Administrator username"
echo "(Default: root and password is blank)"
echo -n "MySQL Admin: "
read MYADMIN
echo -n "Password: "
read MYPASS
if [ "X$MYPASS" != "X" ]; then MYPASS="-p$MYPASS"; fi
echo "\q" |mysql -u $MYADMIN $MYPASS || exit 0
}
checkfordb(){
if
echo "show databases" |mysql -u $MYADMIN "$MYPASS" |grep zm
then
echo "A $ZM_DB_NAME database exists."
while [ true ]
do
echo "Choose one of the following options:"
echo "[D]rop the old database and reinitialize"
echo "[E]xit and do nothing"
read OPTION
case $OPTION in
"D"|"d")
echo "drop database zm;"|mysql -u $MYADMIN $MYPASS
return
;;
"E"|"e")
exit 0
;;
esac
done
fi
}
initdb(){
sql=/tmp/zm.crdb.sql
echo "" >$sql
chmod 600 $sql
echo "CREATE DATABASE $ZM_DB_NAME;" >>$sql
echo "USE $ZM_DB_NAME;" >>$sql
echo "GRANT all on $ZM_DB_NAME.* TO '$ZM_DB_USER'@'$ClientHost' IDENTIFIED BY '$ZM_DB_PASS';" >>$sql
cat $sql | mysql -B -h $ZM_DB_HOST -u $MYADMIN $MYPASS
rm -f $sql
cat $ZM_PATH_UPDATE/zm_create.sql | mysql -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME
}
restoredb(){
if
[ -e $ZM_BACKUP ]
then
cat $ZM_BACKUP | mysql -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME
else
echo "$ZM_BACKUP doesn't exist"
exit 1
fi
}
restore_events(){
for SQL in $(find $ZM_PATH_WEB/$EVENTS_DIR -name .sql)
do
cat $SQL | mysql -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME
done
}
loadcfg
chkcfg
reloadcfg
chk_backup_ver
getmylogin
checkfordb
initdb
restoredb
restore_events
exit 0