#!/bin/bash #---------------------------------------------------------------------------- . /usr/LH/bin/backupcommon || { echo 1>&2 "Can not load common settings!" exit 1 } #---------------------------------------------------------------------------- do_file_updates() { # A function because we need to do this in two places echo "Doing any needed file updates..." [ -n "$UPDATE_FILES" -a -f "$UPDATE_FILES" -a -x "$UPDATE_FILES" ] && "$UPDATE_FILES" } do_db_updates() { # We need to redo this since we just restored the old settings... lock_myth # This is gross, but makes sure that the lock count has a sane value... mysql_cmd "update settings set data = '1' where value = 'MythShutdownLock'" # Clean up ambiguous schema version settings... for val in $(mysql_cmd "select distinct value from settings where value like '%SchemaVer'") ; do # Find the numeric maximum version for this schema max_ver=$(mysql_cmd "select max(0 + ifnull(data, 0)) from settings where value = '$val'") # Wipe out all the existing ones mysql_cmd "delete from settings where value = '$val'" # Insert a nice clean unique one. mysql_cmd "insert into settings set value = '$val', data = '$max_ver'" done # This table causes problems with mythweb on upgrades... mysql_cmd "update settings set data = '0' where value = 'WebDBSchemaVer'" mysql_cmd "drop table mythweb_sessions" >/dev/null 2>&1 } # Let's prevent mythshutdown from shutting down the system. lock_myth # Play a sound to let you know I'm starting. play_sound restore.wav # Doing this while the backend is active could be BAD. stop_mythbackend # If the standard backup file exists we try to restore the files based # on our restore list. if compression=$(compression_type "$BACKUP_TAR") ; then echo "Starting the restore of files..." cd / expand -c $BACKUP_TAR$compression | $TAR xpvf - $RESTORE_LIST $EXCLUSION 2>&1 | $SED -e '/Error exit delayed from previous errors/d' echo "Completed the restore of files." fi # If the db backup file exists start the DB restore and upgrade if compression=$(compression_type "$BACKUP_SQL") ; then echo "Starting the DB restore, this can take a while..." echo "Clearing out the existing skeleton..." #mysql_stdin < $DROP_SQL echo "Recreating the db..." $MYSQLADMIN -u root create $DATABASE echo "Restoring the data (long)..." expand -c $BACKUP_SQL$compression | mysql_stdin echo "Doing any needed db updates..." [ -n "$UPDATE_SQL" -a -f "$UPDATE_SQL" ] && mysql_stdin < $UPDATE_SQL echo "Completed the DB restore." fi echo "Sanity checking your restore..." play_sound vr.wav # Play a sound to let you know the outcome. if check_files_and_tables $RESTORE_LIST ; then echo "Restore passes all checks." play_sound restored.wav STATUS=0 else echo "The restore failed or was already modified!" play_sound rf.wav STATUS=1 fi # Make any updates _after_ we verify the backup... do_db_updates do_file_updates # Now it's more or less safe to restart the backend. start_mythbackend exit $STATUS