new version for 2021

2021
Eric Loyd 5 years ago
parent 1fe4482de3
commit 2ef08250d3

@ -1,11 +1,7 @@
primary: sync default: test
./failover.sh -P nagiosxi-p.princeton.edu -S nagiosxi-f.princeton.edu -H nagiosxi-p.princeton.edu
secondary: test:
./failover.sh -P nagiosxi-p.princeton.edu -S nagiosxi-f.princeton.edu -H nagiosxi-f.princeton.edu ./failover.sh -P primary.localdomain -S secondary.localdomain
sync: go:
rsync -av /home/nagios/bin/ nagiosxi-f.princeton.edu:/home/nagios/bin/ ./failover.sh -P primary.localdomain -S secondary.localdomain -E
copy:
rsync -av /root/princeton/failover/ /home/nagios/bin; chown -R nagios. /home/nagios/bin

@ -8,10 +8,13 @@
PATH=/usr/sbin:/sbin:/usr/bin:/bin PATH=/usr/sbin:/sbin:/usr/bin:/bin
primary="nagiosxi-p.princeton.edu" #primary="nagiosxi-p.princeton.edu"
secondary="nagiosxi-f.princeton.edu" #secondary="nagiosxi-f.princeton.edu"
primary=""
secondary=""
synconly="false" synconly="false"
syncname="sync" syncname="sync"
extraCmd=""
hostname=`/bin/hostname` hostname=`/bin/hostname`
@ -24,7 +27,7 @@ while [ -n "$1" ]; do
-P | --primary) primary="$2"; shift 2;; -P | --primary) primary="$2"; shift 2;;
-n | --sync-name) syncname="$2"; shift 2;; -n | --sync-name) syncname="$2"; shift 2;;
-s | --sync-only) synconly="true"; shift 1;; -s | --sync-only) synconly="true"; shift 1;;
*) shift 1;; *) extraCmd="$extraCmd $1"; shift 1;;
esac esac
done done
@ -37,20 +40,25 @@ do_nothing() {
do_primary() { do_primary() {
verbose "We are the primary. Creating package to send to secondary." verbose "We are the primary. Creating package to send to secondary."
./rsync_xi.sh --prepend ${syncname} --secondary "${secondary}" ./rsync_xi.sh --prepend ${syncname} --primary "${primary}" --secondary "${secondary}" $extraCmd
cp /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.primary /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css if [ -r "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.primary" -a -w "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css" ]; then
verbose "Copying local gradient files"
cp /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.primary /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css
fi
} }
do_secondary() { do_secondary() {
verbose "We are the secondary. Expanding package from the primary." verbose "We are the secondary. Expanding package from the primary."
syncfile=`ls -tr1 /store/backups/nagiosxi/ | tail -1` syncfile=$(basename `ls -tr1 /store/backups/nagiosxi/${syncname}* | tail -1`)
[ -z "$syncfile" ] && error "No sync file ($syncfile) found." && exit 2 [ -z "$syncfile" ] && error "No sync file ($syncfile) found." && exit 2
./restore_xi.sh /store/backups/nagiosxi/$syncfile ./rsync_xi.sh --primary "${primary}" --secondary "${secondary}" --file "/store/backups/nagiosxi/$syncfile"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
verbose "Stopping Nagios services because we are the secondary" verbose "Ensuring Nagios services are stopped because we are the secondary"
sleep 2 sleep 2
./nagios_startstop.sh stop /home/nagios/bin/nagios_startstop.sh stop
cp /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.secondary /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css if [ -r "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.secondary" -a -w "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css" ]; then
cp /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.secondary /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css
fi
rm -f ${syncfile} rm -f ${syncfile}
fi fi
} }
@ -62,3 +70,4 @@ case "$hostname" in
esac esac
exit 0 exit 0

@ -47,4 +47,4 @@ while [ -n "$1" ]; do
stop) stop_engine; shift 1;; stop) stop_engine; shift 1;;
*) shift 1;; *) shift 1;;
esac esac
done done

@ -1,17 +1,24 @@
#!/bin/bash #!/bin/bash
# #
# Creates a Full Backup of Nagios XI # Creates a Full Backup of Nagios XI
# Copyright (c) 2011-2018 Nagios Enterprises, LLC. All rights reserved. # Copyright (c) 2011-2020 Nagios Enterprises, LLC. All rights reserved.
# #
PATH=/home/nagios/bin:/usr/bin:/bin PATH=/home/nagios/bin:/usr/bin:/bin
. /home/nagios/bin/colors.sh . /home/nagios/bin/colors.sh
BASEDIR=/usr/local/nagiosxi/scripts BASEDIR="/usr/local/nagiosxi/scripts"
# FIXME
SBLOG="/usr/local/nagiosxi/var/components/scheduledbackups.log" SBLOG="/usr/local/nagiosxi/var/components/scheduledbackups.log"
ts=`date +%s`
secondary="" timeStamp=`date +%s`
hostname="`/bin/hostname`"
pName=""
sName=""
noping=/bin/false
execute="-n"
syncfile=""
isP=/bin/false
isS=/bin/false
# Import Nagios XI and xi-sys.cfg config vars # Import Nagios XI and xi-sys.cfg config vars
. $BASEDIR/../var/xi-sys.cfg . $BASEDIR/../var/xi-sys.cfg
@ -22,8 +29,12 @@ eval $(php $BASEDIR/import_xiconfig.php)
############################### ###############################
usage () { usage () {
echo "" echo ""
echo "Use this script to backup Nagios XI." echo "Use this script to synchronize primary XI to secondary, or to expand primary information on secondary"
echo "" echo ""
echo " -P | --primary Set the FQDN of the primary (what is returned by /bin/hostname)"
echo " -S | --secondary Set the FQDN of the secondary (what is returned by /bin/hostname)"
echo " -F | --file Set the name of the file that we will be restoring from on the secondary"
echo " -E | --execute Perform the sync (otherwise, it just does a dry-run)"
echo " -n | --name Set the name of the backup minus the .tar.gz" echo " -n | --name Set the name of the backup minus the .tar.gz"
echo " -p | --prepend Prepend a string to the .tar.gz name" echo " -p | --prepend Prepend a string to the .tar.gz name"
echo " -a | --append Append a string to the .tar.gz name" echo " -a | --append Append a string to the .tar.gz name"
@ -36,12 +47,24 @@ usage () {
############################### ###############################
while [ -n "$1" ]; do while [ -n "$1" ]; do
case "$1" in case "$1" in
-s | --secondary) -P | --primary)
secondary="$2" pName="$2"
;;
-S | --secondary)
sName="$2"
;;
-E | --execute)
execute=""
;;
-F | --file)
syncfile="$2"
;;
--noping)
noping=/bin/true
;; ;;
-h | --help) -h | --help)
usage usage
exit 1 exit 0
;; ;;
-n | --name) -n | --name)
fullname=$2 fullname=$2
@ -59,10 +82,13 @@ while [ -n "$1" ]; do
shift shift
done done
[ -z "$secondary" ] && echo "Secondary not specified." && exit 2 do_primary() {
ping_host $sName
[ $? -ne 0 ] && echo "Cannot ping $sName. Use --noping to continue wihout ping." && exit
echo "Starting sync from $pName to $sName"
# Restart nagios to forcibly update retention.dat # Restart nagios to forcibly update retention.dat
echo "Restart nagios to forcibly update retention.dat" verbose "Restarting nagios to forcibly update retention.dat"
sudo $BASEDIR/manage_services.sh stop nagios sudo $BASEDIR/manage_services.sh stop nagios
sleep 5 sleep 5
sudo $BASEDIR/manage_services.sh start nagios sudo $BASEDIR/manage_services.sh start nagios
@ -81,75 +107,71 @@ cd $rootdir
name=$fullname name=$fullname
if [ -z $fullname ]; then if [ -z $fullname ]; then
name=$prepend$ts$append name=$prepend$timeStamp$append
fi fi
# Get current Unix timestamp as name # Get current Unix timestamp as name
if [ -z $name ]; then if [ -z $name ]; then
name=$ts name=timeStampts
fi fi
# My working directory # My working directory
mydir=$rootdir/$name workDir=$rootdir/$name
# Make directory for this specific backup # Make directory for this specific backup
mkdir -p $mydir mkdir -p $workDir
##############################
# BACKUP DIRS
##############################
# sudo rsync -av --rsync-path="sudo /bin/rsync" /usr/local/test/ nagios@secondary:/usr/local/test/
do_rsync() { do_rsync() {
verbose "Syncing $*..." verbose "Syncing $*..."
sudo rsync -av --delete --delete-after --rsync-path="sudo /bin/rsync" "$1" "nagios@${secondary}:${1}" src="$1"
[ ! -e "$src" ] && warning " OK: No such file or directory: $src" && return
[ -d "$src" ] && sudo rsync -a --delete --delete-after --rsync-path="sudo /bin/rsync" ${execute} ${src}/ nagios@${sName}:${src}/
[ -f "$src" ] && sudo rsync -a --delete --delete-after --rsync-path="sudo /bin/rsync" ${execute} ${src} nagios@${sName}:${src}
} }
do_backup_files() {
##############################
# BACKUP DIRS
##############################
# Only backup NagiosQL if it exists # Only backup NagiosQL if it exists
if [ -d "/var/www/html/nagiosql" ]; then if [ -d "/var/www/html/nagiosql" ]; then
do_rsync /var/www/html/nagiosql/ do_rsync /var/www/html/nagiosql
do_rsync /etc/nagiosql/ do_rsync /etc/nagiosql
fi
# Backup ramdisk if it exists
if [ -f "/etc/sysconfig/nagios" ]; then
do_rsync /etc/sysconfig/nagios
fi
if [ "$distro" == "Ubuntu" -o "$distro" == "Debian" ]; then
do_rsync /var/spool/cron/crontabs/$apacheuser
else
do_rsync /var/spool/cron/apache
fi
if [ -d "/etc/apache2/sites-available" ]; then
do_rsync /etc/apache2/sites-available/default-ssl.conf
else
do_rsync $httpdconfdir/ssl.conf
fi fi
do_rsync /etc/mrtg/conf.d/ do_rsync /etc/apache2/sites-available/default-ssl.conf
do_rsync /etc/mrtg/mrtg.cfg
do_rsync /etc/snmp/
do_rsync /home/nagios/
do_rsync /usr/local/nagios/
do_rsync /usr/local/nagiosmobile/
do_rsync /usr/local/nagiosxi/
do_rsync /usr/local/nagvis/
do_rsync /usr/local/nrdp/
do_rsync /usr/share/snmp/
do_rsync /var/lib/mrtg/
do_rsync /etc/logrotate.d/nagiosxi do_rsync /etc/logrotate.d/nagiosxi
do_rsync $httpdconfdir/nagiosxi.conf do_rsync /etc/mrtg/conf.d
do_rsync /etc/mrtg/mrtg.cfg
do_rsync /etc/snmp
do_rsync /etc/sysconfig/nagios
do_rsync /home/nagios
do_rsync $httpdconfdir/nagios.conf
do_rsync $httpdconfdir/nagiosmobile.conf do_rsync $httpdconfdir/nagiosmobile.conf
do_rsync $httpdconfdir/nagiosxi.conf
do_rsync $httpdconfdir/nagvis.conf do_rsync $httpdconfdir/nagvis.conf
do_rsync $httpdconfdir/nrdp.conf do_rsync $httpdconfdir/nrdp.conf
do_rsync $httpdconfdir/ssl.conf
do_rsync /usr/local/nagios
do_rsync /usr/local/nagiosmobile
do_rsync /usr/local/nagiosxi
do_rsync /usr/local/nagvis
do_rsync /usr/local/nrdp
do_rsync /usr/share/snmp
do_rsync /var/lib/mrtg
do_rsync /var/spool/cron/apache
do_rsync /var/spool/cron/crontabs/$apacheuser
verbose "Checking nagios.cfg for nonstandard directories..."
for dir in `egrep "[^#].*=" /usr/local/nagios/etc/nagios.cfg | awk -F= '/\// {print $2}' | egrep -v "(usr/lib|/usr/local/nagios|/tmp|/var/run)" | rev | cut -d "/" -f 2- | rev | sort -u`; do
echo "Directory $dir needs to be copied"
do_rsync "${dir}/"
done
verbose "Backing up MySQL databases..." } # End of do_backup_files
mkdir -p $mydir/mysql
do_backup_sql() {
##############################
# BACKUP DATABASES
##############################
echo "Backing up MySQL databases..."
mkdir -p $workDir/mysql
if [[ "$cfg__db_info__ndoutils__dbserver" == *":"* ]]; then if [[ "$cfg__db_info__ndoutils__dbserver" == *":"* ]]; then
ndoutils_dbport=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f2 -d":"` ndoutils_dbport=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f2 -d":"`
ndoutils_dbserver=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f1 -d":"` ndoutils_dbserver=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f1 -d":"`
@ -157,11 +179,11 @@ else
ndoutils_dbport='3306' ndoutils_dbport='3306'
ndoutils_dbserver="$cfg__db_info__ndoutils__dbserver" ndoutils_dbserver="$cfg__db_info__ndoutils__dbserver"
fi fi
mysqldump -h "$ndoutils_dbserver" --port="$ndoutils_dbport" -u $cfg__db_info__ndoutils__user --password="$cfg__db_info__ndoutils__pwd" --add-drop-database -B $cfg__db_info__ndoutils__db > $mydir/mysql/nagios.sql mysqldump -h "$ndoutils_dbserver" --port="$ndoutils_dbport" -u $cfg__db_info__ndoutils__user --password="$cfg__db_info__ndoutils__pwd" --add-drop-database -B $cfg__db_info__ndoutils__db > $workDir/mysql/nagios.sql
res=$? res=$?
if [ $res != 0 ]; then if [ $res != 0 ]; then
error "Error backing up MySQL database 'nagios' - check the password in this script!" | tee -a $SBLOG echo "Error backing up MySQL database 'nagios' - check the password in this script!"
rm -rf $mydir rm -r $workDir
exit $res; exit $res;
fi fi
if [[ "$cfg__db_info__nagiosql__dbserver" == *":"* ]]; then if [[ "$cfg__db_info__nagiosql__dbserver" == *":"* ]]; then
@ -171,25 +193,26 @@ else
nagiosql_dbport='3306' nagiosql_dbport='3306'
nagiosql_dbserver="$cfg__db_info__nagiosql__dbserver" nagiosql_dbserver="$cfg__db_info__nagiosql__dbserver"
fi fi
mysqldump -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u $cfg__db_info__nagiosql__user --password="$cfg__db_info__nagiosql__pwd" --add-drop-database -B $cfg__db_info__nagiosql__db > $mydir/mysql/nagiosql.sql mysqldump -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u $cfg__db_info__nagiosql__user --password="$cfg__db_info__nagiosql__pwd" --add-drop-database -B $cfg__db_info__nagiosql__db > $workDir/mysql/nagiosql.sql
res=$? res=$?
if [ $res != 0 ]; then if [ $res != 0 ]; then
error "Error backing up MySQL database 'nagiosql' - check the password in this script!" | tee -a $SBLOG echo "Error backing up MySQL database 'nagiosql' - check the password in this script!"
rm -rf $mydir rm -r $workDir
exit $res; exit $res;
fi fi
# Only backup PostgresQL if we are still using it # Only backup PostgresQL if we are still using it
if [ $cfg__db_info__nagiosxi__dbtype == "pgsql" ]; then if [ $cfg__db_info__nagiosxi__dbtype == "pgsql" ]; then
verbose "Backing up PostgresQL databases..." echo "Backing up PostgresQL databases..."
mkdir -p $mydir/pgsql mkdir -p $workDir/pgsql
if [ -z $cfg__db_info__nagiosxi__dbserver ]; then if [ -z $cfg__db_info__nagiosxi__dbserver ]; then
cfg__db_info__nagiosxi__dbserver="localhost" cfg__db_info__nagiosxi__dbserver="localhost"
fi fi
pg_dump -h $cfg__db_info__nagiosxi__dbserver -c -U $cfg__db_info__nagiosxi__user $cfg__db_info__nagiosxi__db > $mydir/pgsql/nagiosxi.sql pg_dump -h $cfg__db_info__nagiosxi__dbserver -c -U $cfg__db_info__nagiosxi__user $cfg__db_info__nagiosxi__db > $workDir/pgsql/nagiosxi.sql
res=$? res=$?
if [ $res != 0 ]; then if [ $res != 0 ]; then
error "Error backing up PostgresQL database 'nagiosxi' !" | tee -a $SBLOG echo "Error backing up PostgresQL database 'nagiosxi' !"
rm -rf $mydir rm -r $workDir
exit $res; exit $res;
fi fi
else else
@ -200,11 +223,11 @@ else
nagiosxi_dbport='3306' nagiosxi_dbport='3306'
nagiosxi_dbserver="$cfg__db_info__nagiosxi__dbserver" nagiosxi_dbserver="$cfg__db_info__nagiosxi__dbserver"
fi fi
mysqldump -h "$nagiosxi_dbserver" --port="$nagiosxi_dbport" -u $cfg__db_info__nagiosxi__user --password="$cfg__db_info__nagiosxi__pwd" --add-drop-database -B $cfg__db_info__nagiosxi__db > $mydir/mysql/nagiosxi.sql mysqldump -h "$nagiosxi_dbserver" --port="$nagiosxi_dbport" -u $cfg__db_info__nagiosxi__user --password="$cfg__db_info__nagiosxi__pwd" --add-drop-database -B $cfg__db_info__nagiosxi__db > $workDir/mysql/nagiosxi.sql
res=$? res=$?
if [ $res != 0 ]; then if [ $res != 0 ]; then
error "Error backing up MySQL database 'nagiosxi' - check the password in this script!" | tee -a $SBLOG echo "Error backing up MySQL database 'nagiosxi' - check the password in this script!"
rm -rf $mydir rm -r $workDir
exit $res; exit $res;
fi fi
fi fi
@ -212,7 +235,7 @@ fi
############################## ##############################
# COMPRESS BACKUP # COMPRESS BACKUP
############################## ##############################
verbose "Compressing backup..." echo "Compressing backup..."
tar czfp $name.tar.gz $name tar czfp $name.tar.gz $name
rm -rf $name rm -rf $name
@ -220,20 +243,307 @@ rm -rf $name
chown $nagiosuser:$nagiosgroup $name.tar.gz chown $nagiosuser:$nagiosgroup $name.tar.gz
if [ -s $name.tar.gz ];then if [ -s $name.tar.gz ];then
echo " " echo " "
echo "===============" echo "==============="
echo "BACKUP COMPLETE" echo "BACKUP COMPLETE"
echo "===============" echo "==============="
verbose "Backup stored in $rootdir/$name.tar.gz" echo "Backup stored in $rootdir/$name.tar.gz"
else else
echo " " echo " "
echo "===============" echo "==============="
echo "BACKUP FAILED" echo "BACKUP FAILED"
echo "===============" echo "==============="
error "File was not created at $rootdir/$name.tar.gz" echo "File was not created at $rootdir/$name.tar.gz"
rm -rf $mydir rm -rf $workDir
exit 1; exit 1;
fi fi
do_rsync $rootdir/$name.tar.gz do_rsync $rootdir/$name.tar.gz
exit 0 } # End of do_backup_sql
do_backup_files
do_backup_sql
} # End of do_primary
restore_secondary() {
# Change this password if your root password is different than "nagiosxi"
# MySQL root password
themysqlpass="nagiosxi"
# Tests mysql connection by opening a connection and selecting the DB we want to use
test_mysql_connection() {
local db_host="$1"
local db_port="$2"
local db_username="$3"
local db_password="$4"
db_error=$(mysql -h "$db_host" --port="$db_port" -u $db_username --password=$db_password -e "show databases;" 2>&1)
return $?
}
backupfile=$1
rootdir=/store/backups/nagiosxi
##############################
# MAKE SURE BACKUP FILE EXIST
##############################
if [ ! -f $backupfile ]; then
error "Unable to find backup file $backupfile!"
exit 1
fi
##############################
# MAKE TEMP RESTORE DIRECTORY
##############################
#ts=`echo $backupfile | cut -d . -f 1`
ts=`date +%s`
### echo "TS=$ts"
mydir=${rootdir}/${ts}-restore
mkdir -p $mydir
if [ ! -d $mydir ]; then
error "Unable to create restore directory $mydir!"
exit 1
fi
##############################
# UNZIP BACKUP
##############################
verbose "Extracting backup to $mydir..."
cd $mydir
tar xzfps $backupfile
# Change to subdirectory
cd `ls | head -1`
backupdir=`pwd`
verbose "Backup files look okay. Preparing to restore..."
##############################
# SHUTDOWN SERVICES
##############################
verbose "Shutting down services..."
[ -r "/usr/local/nagios/var/retention.dat" ] && cp /usr/local/nagios/var/retention.dat $backupdir
sudo $BASEDIR/manage_services.sh stop nagios
sudo $BASEDIR/manage_services.sh stop ndo2db
sudo $BASEDIR/manage_services.sh stop npcd
[ -r "$backupdir/retention.dat" ] && cp $backupdir/retention.dat /usr/local/nagios/var/retention.dat
rootdir=/
# Overwrite the mysqlpass with the hardcoded one at the top
mysqlpass="$themysqlpass"
##############################
# RESTORE DATABASES
##############################
verbose "Restoring MySQL databases..."
if [[ "$cfg__db_info__ndoutils__dbserver" == *":"* ]]; then
ndoutils_dbport=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f2 -d":"`
ndoutils_dbserver=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f1 -d":"`
else
ndoutils_dbport='3306'
ndoutils_dbserver="$cfg__db_info__ndoutils__dbserver"
fi
# Test mysql and see if we can connect before continuing
x=1
while [ $x -le 5 ];
do
test_mysql_connection $ndoutils_dbserver $ndoutils_dbport "root" $mysqlpass
if [ $? == 1 ]; then
error "ERROR: Could not connect to $ndoutils_dbserver:$ndoutils_dbport with root password supplied."
read -s -r -p "Please enter the MySQL root password: " mysqlpass
echo ""
else
break
fi
if [ $x -eq 5 ]; then
error "ERROR: Aborting restore: Could not connect to MySQL."
error "$db_error"
exit 1
fi
x=$(($x+1))
done
mysql -h "$ndoutils_dbserver" --port="$ndoutils_dbport" -u root --password=$mysqlpass < $backupdir/mysql/nagios.sql
res=$?
if [ $res != 0 ]; then
error "Error restoring MySQL database 'nagios'"
exit 1
fi
if [[ "$cfg__db_info__nagiosql__dbserver" == *":"* ]]; then
nagiosql_dbport=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f2 -d":"`
nagiosql_dbserver=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f1 -d":"`
else
nagiosql_dbport='3306'
nagiosql_dbserver="$cfg__db_info__nagiosql__dbserver"
fi
# Test mysql again and see if we can connect before continuing
x=1
while [ $x -le 5 ];
do
test_mysql_connection $nagiosql_dbserver $nagiosql_dbport "root" $mysqlpass
if [ $? == 1 ]; then
error "ERROR: Could not connect to $nagiosql_dbserver:$nagiosql_dbport with root password supplied."
read -s -r -p "Please enter the MySQL root password: " mysqlpass
echo ""
else
break
fi
if [ $x -eq 5 ]; then
error "ERROR: Aborting restore: Could not connect to MySQL."
error "$db_error"
exit 1
fi
x=$(($x+1))
done
mysql -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u root --password=$mysqlpass < $backupdir/mysql/nagiosql.sql
res=$?
if [ $res != 0 ]; then
error "Error restoring MySQL database 'nagiosql'"
exit 1
fi
# Only restore PostgresQL if we are still using it
if [ "$cfg__db_info__nagiosxi__dbtype" == "pgsql" ]; then
service postgresql initdb &>/dev/null || true
verbose "Restoring Nagios XI PostgresQL database..."
if [ -f /var/lib/pgsql/data/pg_hba.conf ]; then
pghba="/var/lib/pgsql/data/pg_hba.conf"
cp -pr $pghba $pghba.old
else
#Ubuntu/Debian
pghba=$(find /etc/postgresql -name "*pg_hba.conf")
cp -pr $pghba $pghba.old
fi
echo "local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust" > $pghba
$BASEDIR/manage_services.sh start postgresql
sudo -u postgres psql -c "create user nagiosxi with password 'n@gweb';"
sudo -u postgres psql -c "create database nagiosxi owner nagiosxi;"
$BASEDIR/manage_services.sh restart postgresql
# Sleep a bit (required so Postgres finishes startup before we connect again)
verbose "Sleeping for a few seconds (please wait)..."
sleep 7
psql -U nagiosxi nagiosxi < $backupdir/pgsql/nagiosxi.sql
res=$?
if [ $res != 0 ]; then
error "Error restoring PostgresQL database 'nagiosxi' !"
exit 1
fi
$BASEDIR/manage_services.sh restart postgresql
if [ "$dist" == "el7" ] || [ "$dist" == "el8" ]; then
systemctl enable postgresql.service
elif [[ "$distro" == "Ubuntu" ]] || [[ "$distro" == "Debian" ]]; then
update-rc.d postgresql enable
else
chkconfig postgresql on
fi
# Remove nagiosxi db from mysql if postgres is used instead
if [[ "$cfg__db_info__nagiosql__dbserver" == *":"* ]]; then
nagiosql_dbport=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f2 -d":"`
nagiosql_dbserver=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f1 -d":"`
else
nagiosql_dbport='3306'
nagiosql_dbserver="$cfg__db_info__nagiosql__dbserver"
fi
mysql -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u root --password=$mysqlpass < "DROP TABLE IF EXISTS nagiosxi;"
else
verbose "Restoring Nagios XI MySQL database..."
if [[ "$cfg__db_info__nagiosxi__dbserver" == *":"* ]]; then
nagiosxi_dbport=`echo "$cfg__db_info__nagiosxi__dbserver" | cut -f2 -d":"`
nagiosxi_dbserver=`echo "$cfg__db_info__nagiosxi__dbserver" | cut -f1 -d":"`
else
nagiosxi_dbport='3306'
if [ "x$cfg__db_info__nagiosxi__dbserver" == "x" ]; then
nagiosxi_dbserver="localhost"
else
nagiosxi_dbserver="$cfg__db_info__nagiosxi__dbserver"
fi
fi
# Test mysql again and see if we can connect before continuing
x=1
while [ $x -le 5 ];
do
test_mysql_connection $nagiosxi_dbserver $nagiosxi_dbport "root" $mysqlpass
if [ $? == 1 ]; then
error "ERROR: Could not connect to $nagiosxi_dbserver:$nagiosxi_dbport with root password supplied."
read -s -r -p "Please enter the MySQL root password: " mysqlpass
echo ""
else
break
fi
if [ $x -eq 5 ]; then
error "ERROR: Aborting restore: Could not connect to MySQL."
error "$db_error"
exit 1
fi
x=$(($x+1))
done
mysql -h "$nagiosxi_dbserver" --port="$nagiosxi_dbport" -u root --password=$mysqlpass < $backupdir/mysql/nagiosxi.sql
res=$?
if [ $res != 0 ]; then
error "Error restoring MySQL database 'nagiosxi' !"
exit 1
fi
fi
##############################
# RESTART SERVICES
##############################
verbose "Restarting services..."
sudo $BASEDIR/manage_services.sh restart mysqld
sudo $BASEDIR/manage_services.sh restart httpd
sudo $BASEDIR/manage_services.sh start npcd
sudo $BASEDIR/manage_services.sh start ndo2db
sudo $BASEDIR/manage_services.sh start nagios
##############################
# DELETE TEMP RESTORE DIRECTORY
##############################
rm -rf $mydir
echo " "
echo "==============="
echo "RESTORE COMPLETE"
echo "==============="
verbose "Restarting Nagios XI"
cd /usr/local/nagiosxi/scripts
./reconfigure_nagios.sh
}
do_secondary() {
[ ! -r "$syncfile" ] && error "No sync file ($syncfile) found." && exit 2
restore_secondary "$syncfile"
if [ $? -eq 0 ]; then
if [ -r "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.secondary" -a -w "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css" ]; then
cp /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.secondary /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css
fi
rm -f ${syncfile}
fi
} # End of do_secondary
ping_host() {
$noping && return 0
/usr/local/nagios/libexec/check_icmp -H $1 >/dev/null 2>&1
}
[ -z "$pName" -o -z "$sName" ] && echo "Must specify primary name and secondary name" && exit 0
[ "$hostname" = "$pName" ] && isP=/bin/true
[ "$hostname" = "$sName" ] && isS=/bin/true
$isP && do_primary
$isS && do_secondary

Loading…
Cancel
Save