Skip to main content

Script - Data Dump Script for Internal Customer Servers

This script is to get a backup of all databases to either send them to a test server, just a backup or send them for support.

Name:

datadump

Script:

#!/bin/bash
##############################################################################
#
# Added by Steve Ling 20230727
# Modified Steve Ling 20230804 
#
# This is to ask the user for which printer they wish to use
#
##############################################################################
if [ `uname` = "Linux" ] ; then
 #stty erase
 necho="echo -e"
 BOLD="\033[1m"
 UNDER="\033[4m"
 UNDERSTOP="\033[0m"
 BLINK="\033[5m"
 REVVIDEO=`tput smso`
 NORMTYP="\033[0m"
else
 necho="echo"
 BOLD=`tput bold`
 UNDER=`tput smul`
 UNDERSTOP=`tput rmul`
 BLINK=`tput blink`
 REVVIDEO=`tput smso`
 NORMTYP=`tput rmso`
fi
##############################################################
#                   Set Menu Header start point
#                   To include variables for menu header
##############################################################
# Display Date
#
clear
DATE=`date +"%d/%a %H:%M"`
##############################################################
#                Display layout of Menu Header
##############################################################
#
$necho "Backup                          ${BOLD}Backup Menu      ${NORMTYP}                   $DATE"
$necho "================================================================================"
$necho ""

#
# This script captures datasets and logs and then sends them to a server for pickup
# Please update these variables for each site
#
# For FTP make sure .netrc is setup so that FTP works without prompts
# If the site has no FTP ability then leave this FTPSERVER blank
#
DBHOST=localhost
SITENAME=$PLANTID
MYSQLUSER=kiwisql
MYSQLPASS=800486kiwi
#FTPSERVER=
#
# If LOGS is not set we will use either $VLOG or $JCSC/logs or $JLOG.
# If the site has no VUE products then leave the SITE and CONF variable blank
# If MAPDATA is not set it will use $DATA.  For pure VUE sites set MAPDATA to NONE
#
SITE=/KIWI/services/sites/${SITENAME}
#MAPDATA=/KIWI/site_${SITENAME}/data_${SITENAME}
MAPDATA=/KIWI/site_${SITENAME}/data_${SITENAME}
LOGS=${SITE}/current/logs
CONF=${SITE}/current/conf
COMMDIR=${COMMSDIR}
XMITDIR=/KIWI/site_${SITENAME}/work/corrop/
#
echo ""
echo "Choose what to do with the backup"
echo ""
echo "1) Rsync/Send to a internal Dev or Test Server"
echo "2) Just a backup"
echo "X) Exit"
echo ""
echo "You have to choose a number, you have 5 seconds"
read FTPSERVER
case $FTPSERVER in
        1)
        echo "Enter the hostname or IP of the server"
        read HOSTSERVER
        FTPSERVER=$HOSTSERVER
        ;;
        2)
        FTPSERVER=BACKUP
        ;;
        *) 
        exit
        ;;
esac
#
#
# Determine SITE and MAPDATA variables
#
if [ ! -d "$SITE" ]; then
    echo "Kiwiplan Vue Site not a valid directory: $SITE.  No Vue data will be saved." 
    SITE=""
fi
    
if [ "$CONF" = "" -a "$VUE" != "None" ];then
        cd $SITE
        cd ../conf
        CONF=`pwd`
fi
if [ "$CONF" = "" -a "$VUE" != "None" ];then
        echo "CONF not defined or found, script can not be run"
        exit
fi
if [ "$MAPDATA" = "" ];then
        MAPDATA=$DATA
fi
if [ "$MAPDATA" = "" ];then
        echo "Do not know where classic MAP dataset lives.  Assuming it is a pure VUE site"
        MAPDATA="NONE"
fi
#
# The following variables can be passed in to the script
# $1 = NAME of dataset
# $2 or $3 or $4 or $5 = NOQMS or NOLOGS or NOXMIT or NOCOMMS
#
FIRSTCHAR=`echo "$1"|cut -c1-2`
if [ "$FIRSTCHAR" = "NO" ];then
        VARI1=""
        VARI2=$1
        VARI3=$2
        VARI4=$3
        VARI5=$4
else
        VARI1=$1
        VARI2=$2
        VARI3=$3
        VARI4=$4
        VARI5=$5
fi
#
# Determine dumpfile name
#
cd $HOME
if [ "$VARI1" = "" ];then
        DUMPNAME=`date +%m%d%H%M`
else
        DUMPNAME=$VARI1
fi
#
# Determine which databases to dump from recentparameters file
#
echo "Placing datasets in $HOME directory"
if [ "$VARI2" = "NOQMS" -o "$VARI3" = "NOQMS" -o "$VARI4" = "NOQMS" -o "$VARI5" = "NOQMS" ];then
        NOQMS=1
else
        NOQMS=0
fi
count=1
if [ "$VUE" != "None" ];then
        LINES=`cat $CONF/recentparametervalues.properties|grep DBNAME |grep -v "kids"|wc -l|tr -d " "`
        while [ $count -le $LINES ];do
                DATANAME=`grep DBNAME $CONF/recentparametervalues.properties |grep -v "kids"|cut -d"=" -f2|head -$count|tail -1`
                DATABASE=`grep DBNAME $CONF/recentparametervalues.properties |grep -v "kids"|cut -d"=" -f2|head -$count|tail -1|cut -d"_" -f2`
                if [ "$NOQMS" = "1" ];then
                        echo $DATANAME|grep qms > /dev/null
                        if [ $? -eq 0 ];then
                                echo "Not creating QMS database at user request"
                        else
                                echo "Creating $SITENAME.$DATABASE.dump"
                                mysqldump --single-transaction --tz-utc=false -h$DBHOST -u$MYSQLUSER -p$MYSQLPASS $DATANAME > $SITENAME.$DATABASE.dump
                        fi
                else
                        echo "Creating $SITENAME.$DATABASE.dump"
                        mysqldump --single-transaction --tz-utc=false -h$DBHOST -u$MYSQLUSER -p$MYSQLPASS $DATANAME > $SITENAME.$DATABASE.dump
                fi
                count=`expr $count + 1`
        done
        #
        # Capture preference bundles
        #
        cd $CONF/preferencebundles/kiwiplan
        tar cf $HOME/$SITENAME.preferencebundles.dump *
        cd $HOME
        #
        # Capture licence files
        #
        cd $CONF/licence
        tar cf $HOME/$SITENAME.licence.dump *
        #
        # Capture Conf database file
        #
        cd $CONF
        tar cf $HOME/$SITENAME.parameters.dump recentparametervalues.properties
fi
#
# Capture classic dataset unless Pure VUE
#
cd $HOME
if [ "$MAPDATA" != "NONE" ];then
        if [ -f $MAPDATA/kwsql ];then
                CLASSIC=`grep "DATA=" $MAPDATA/kwsql|cut -d"=" -f2`
                echo "Dumping MySQL data from $CLASSIC classic dataset"
                mysqldump --single-transaction --tz-utc=false -h$DBHOST -u$MYSQLUSER -p$MYSQLPASS $CLASSIC > $SITENAME.classic.dump
        else
                cd $MAPDATA
                echo "Taring ISAM data from $MAPDATA classic dataset"
                tar cf $HOME/$SITENAME.classic.dump *.PH INDEX* PARAM* upgrade*
                cd $HOME
        fi
else
        echo "No MAPDATA defined...ignoring classic dataset capture"
fi
#
# Capture log files
#
if [ "$VARI2" = "NOLOGS" -o "$VARI3" = "NOLOGS" -o "$VARI4" = "NOLOGS" -o "$VARI5" = "NOXMIT" ];then
        NOLOGS=1
else
        NOLOGS=0
fi
if [ "$VARI2" = "NOXMIT" -o "$VARI3" = "NOXMIT" -o "$VARI4" = "NOXMIT" -o "$VARI5" = "NOXMIT" ];then
        NOXMIT=1
else
        NOXMIT=0
fi
if [ "$VARI2" = "NOCOMMS" -o "$VARI3" = "NOCOMMS" -o "$VARI4" = "NOCOMMS" -o "$VARI5" = "NOCOMMS" ];then
        NOCOMMS=1
else
        NOCOMMS=0
fi
if [ "$VARI2" = "NOLG" -o "$VARI3" = "NOLG" -o "$VARI4" = "NOLG" -o "$VARI5" = "NOLG" ];then
        NOLG=1
else
        NOLG=0
fi
if [ "$NOLOGS" = 0 ];then
        if [ "$VUE" != "None" ];then
                echo "Capturing VUE log files from $LOGS"
                tar cfz $SITENAME.logs.dump $LOGS/*.txt* 2>/dev/null
        else
                echo "Not capturing VUE log files from $SITE"
        fi
        if [ "$NOXMIT" = 0 -a "$XMITDIR" != "" -a -d "$XMITDIR" ];then
                echo "Capturing XMIT log files from $XMITDIR"
                tar cfz $SITENAME.xmgen.dump $XMITDIR/XM*.LOG 2>/dev/null
        else
                echo "Not capturing XMIT log files from $XMITDIR"
        fi
        if [ "$NOCOMMS" = 0 -a "$COMMDIR" != "" ];then
                echo "Capturing COMMS log files from $COMMDIR"
                tar cfz $SITENAME.comms.dump $COMMDIR/CO*.LOG 2>/dev/null
        else
                echo "Not capturing COMMS log files from $COMMDIR"
        fi
        if [ "$NOLG" = 0 -a "$MAPDATA" != "" ];then
                echo "Capturing Classic LG log files from $MAPDATA"
                tar cfz $SITENAME.lg.dump $MAPDATA/*.LG $MAPDATA/*.LG1 2>/dev/null
        else
                echo "Not capturing Classic LG log files from $MAPDATA"
        fi
fi
#
# Compress data
#
cd $HOME
echo "Compressing dump files"
gzip -f $SITENAME.*.dump
#
# Create master dumpfile
#
echo "Creating single dump file $SITENAME.$DUMPNAME.dump.tar"
tar cf $SITENAME.$DUMPNAME.dump.tar $SITENAME.*.dump.gz
#
# FTP dataset
#
if [ "$FTPSERVER" != "BACKUP" ];then
    echo "Rsync'ing $SITENAME.$DUMPNAME.dump.tar to $FTPSERVER"
    rsync -chavzP --stats -e ssh $HOME/$SITENAME.$DUMPNAME.dump.tar $FTPSERVER:$HOME/
fi
#
# Remove old dumpfiles
#
cd $HOME
echo "Removing $SITENAME.dump.gz files"
find $SITENAME.*.dump.gz -type f -delete
echo "Removing old $SITENAME.dump.tar files"
find $SITENAME.*.dump.tar -mtime +5 -type f -delete
#End Script
######################################################