173 lines
4.7 KiB
Bash
173 lines
4.7 KiB
Bash
#!/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=/etc/zm/zm.conf
|
|
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
|