Moving to new server

This support forum board is for support questions relating to Nagios XI, our flagship commercial network monitoring solution.
Locked
User avatar
BanditBBS
Posts: 2474
Joined: Tue May 31, 2011 12:57 pm
Location: Scio, OH
Contact:

Moving to new server

Post by BanditBBS »

So, I have NagiosXI 5.6.14 running in RHEL 6.9 and the DB if offloaded onto another host. I had a new OEL 7.9 host built and installed XI 5.6.14 on it. Can I run the backup and restore script and have it skip the DB since it'd just be restoring over itself?

My plan is this:
  • Build new 7.9 OEL host - Completed
  • Install Nagios 5.6.14 on OEL host - Completed
  • Install all used perl modules and other items used by custom plugins
  • run backup on current RHEL 6.9 and copy to OEL 7.9 host
  • shutdown the RHEL host
  • Run restore
  • Change IP on OEL to the IP of the old RHEL
  • Run restore_repair.sh since OS was changed
  • PARTY!
I believe that's all that is needed, I'd just love to skip the DB parts of the backup and restore to save time and to not need a backup of the DB host since it wouldn't be touched.
2 of XI5.6.14 Prod/DR/DEV - Nagios LogServer 2 Nodes
See my projects on the Exchange at BanditBBS - Also check out my Nagios stuff on my personal page at Bandit's Home and at github
User avatar
vtrac
Posts: 903
Joined: Tue Oct 27, 2020 1:35 pm

Re: Moving to new server

Post by vtrac »

Hi BanditBBS,
That looks like a very good plan.

To perform a backup and then restore:
https://assets.nagios.com/downloads/nag ... ios-XI.pdf


Regards,
Vinh
User avatar
BanditBBS
Posts: 2474
Joined: Tue May 31, 2011 12:57 pm
Location: Scio, OH
Contact:

Re: Moving to new server

Post by BanditBBS »

Hey @vtrac,

My biggest question remains, any harm in commenting out the DB section of the backup and restore script? My DB is offloaded, so no real reason to backup or restore.
2 of XI5.6.14 Prod/DR/DEV - Nagios LogServer 2 Nodes
See my projects on the Exchange at BanditBBS - Also check out my Nagios stuff on my personal page at Bandit's Home and at github
User avatar
vtrac
Posts: 903
Joined: Tue Oct 27, 2020 1:35 pm

Re: Moving to new server

Post by vtrac »

Hi BanditBBS,
I have just looked inside both scripts. Looks like it is OK to comment out both "BACKUP DATABASES" and "RESTORE DATABASES" sections.

/usr/local/nagiosxi/scripts/backup_xi.sh

Code: Select all

##############################
# BACKUP DATABASES
##############################
echo "Backing up MySQL databases..."
mkdir -p $mydir/mysql
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
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
res=$?
if [ $res != 0 ]; then
    echo "Error backing up MySQL database 'nagios' - check the password in this script!" | tee -a $SBLOG
    rm -r $mydir
    exit $res;
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
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
res=$?
if [ $res != 0 ]; then
    echo "Error backing up MySQL database 'nagiosql' - check the password in this script!" | tee -a $SBLOG
    rm -r $mydir
    exit $res;
fi

# Only backup PostgresQL if we are still using it
if [ $cfg__db_info__nagiosxi__dbtype == "pgsql" ]; then
    echo "Backing up PostgresQL databases..."
    mkdir -p $mydir/pgsql
    if [ -z $cfg__db_info__nagiosxi__dbserver ]; then
        cfg__db_info__nagiosxi__dbserver="localhost"
    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
    res=$?
    if [ $res != 0 ]; then
        echo "Error backing up PostgresQL database 'nagiosxi' !" | tee -a $SBLOG
        rm -r $mydir
        exit $res;
    fi
else
    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'
        nagiosxi_dbserver="$cfg__db_info__nagiosxi__dbserver"
    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
    res=$?
    if [ $res != 0 ]; then
        echo "Error backing up MySQL database 'nagiosxi' - check the password in this script!" | tee -a $SBLOG
        rm -r $mydir
        exit $res;
    fi
fi

/usr/local/nagiosxi/scripts/restore_xi.sh

Code: Select all

##############################
# RESTORE DATABASES
##############################

echo "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
        echo "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
        echo "ERROR: Aborting restore: Could not connect to MySQL."
        echo "$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
    echo "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
        echo "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
        echo "ERROR: Aborting restore: Could not connect to MySQL."
        echo "$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
    echo "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

    echo "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)
    echo "Sleeping for a few seconds (please wait)..."
    sleep 7

    psql -U nagiosxi nagiosxi < $backupdir/pgsql/nagiosxi.sql
    res=$?
    if [ $res != 0 ]; then
        echo "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
    echo "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
            echo "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
            echo "ERROR: Aborting restore: Could not connect to MySQL."
            echo "$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
        echo "Error restoring MySQL database 'nagiosxi' !"
        exit 1
    fi
fi

echo "Restarting database servers..."
$BASEDIR/manage_services.sh restart mysqld


Regards,
Vinh
Locked