Files
NodeMgmt/nodemgmt-scripts.sh
2019-01-27 15:30:27 -06:00

197 lines
6.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# MySQL-BU - MySQL Backup Scripts
action="$1"
VERS='1.01272019'
CERT_DAEMON='/usr/bin/certbot'
source /opt/idssys/nodemgmt/settings.conf
source /opt/idssys/defaults/colors.conf
source /opt/idssys/defaults/default.conf
# ========================================================= #
MAIN_MENU() {
while :
do
clear
echo ""
echo -e "${idsCL[LightGreen]} NodeMgmt - G a l e r a / N G I N X N o d e M a n a g e m e n t${idsCL[Default]} ${idsCL[DarkGray]}(ver-${VERS})${idsCL[Default]}"
echo -e "${idsCL[LightGreen]}---------------------------------------------------------------------------${idsCL[Default]}"
echo -e "Node hostname: ${node_hostname}"
echo -e "${idsCL[LightGreen]}---------------------------------------------------------------------------${idsCL[Default]}"
echo ""
echo " [1] Change Backup Location"
echo " [2] Change MySQL User"
echo " [3] Change MySQL Password"
echo " [4] Change MySQL Config File Location"
echo " [5] Change The Number of Backup Days to Keep"
echo ""
echo " [B] Run Backup"
echo " [L] List Backups"
echo " [D] Delete Backups"
echo ""
echo " [C] Add Crontab Entry to run every 3 Hours"
echo -e " ${idsCL[DarkGray]}(edit crontab manually to adjust the backup frequency)${idsCL[Default]}"
echo ""
echo " [Q] Quit"
echo ""
echo ""
echo -e -n "${idsCL[LightYellow]}Please select an [ActionItem] from above:${idsCL[Default]} "
read -n 1 opt
echo ""
case $opt in
1) WEBMIN_INSTALL
INSTALL_MENU;;
2) GLANCES_INSTALL
INSTALL_MENU;;
3) X11VNC_INSTALL
INSTALL_MENU;;
4) FW_INSTALL
INSTALL_MENU;;
5) LINUPX_UNINSTALL
INSTALL_MENU;;
[Bb]) RUN_BACKUP;;
[Ll]) LIST_BACKUPS;;
[Dd]) DELETE_MENU;;
[Cc]) ADD_CRONTAB;;
[Qq]) EXIT1
exit 1;;
*) echo "Thats an invaild option,";
echo "please select a valid option only.";
sleep 1;;
esac
done
}
case $1 in
'backup')
if [ "$BASE_BACKUP" = "" ]; then
$0 backup-base
else
$0 backup-incremental
fi
allfiles=`ls -1 ${BACKUP_PATH}`
files=(`ls -1 ${BACKUP_PATH} | tail -${BACKUPSTOKEEP}`)
for i in $allfiles; do
keep=0;
for a in ${files[@]}; do
if [ $i == $a ]; then
keep=1;
fi;
done;
if [ $keep == 0 ]; then
rm -rf ${BACKUP_PATH}$i;
fi;
done
;;
'backup-base')
DEST_DIR="${DAY_BACKUP_DIR}`date +%H-%M-%S`_BASE"
if [ "$BASE_BACKUP" != "" ]; then
echo -e "${idsCL[Green]}Daily base backup already done. Running incremental backup...${idsCL[Default]}"
sleep 3
$0 backup-incremental
exit 1
fi
if [ ! -d "$DAY_BACKUP_DIR" ]; then
mkdir -p "$DAY_BACKUP_DIR"
fi
# innobackupex --defaults-file="$MYSQLCFG" --user="$MYSQLUSER" --password="$MYSQLPASS" --no-timestamp "$DEST_DIR"
mariabackup --backup --target-dir="$DEST_DIR" --user="$MYSQLUSER" --password="$MYSQLPASS"
;;
'backup-incremental')
DEST_DIR="${DAY_BACKUP_DIR}`date +%H-%M-%S`"
if [ "$BASE_BACKUP" = "" ]; then
echo -e "${idsCL[Green]}Daily base backup not found. Running base backup...${idsCL[Default]}"
$0 backup-base
exit 1
fi
#innobackupex --defaults-file="$MYSQLCFG" --user="$MYSQLUSER" --password="$MYSQLPASS" \
#--incremental-basedir="${DAY_BACKUP_DIR}${BASE_BACKUP}" \
#--incremental "$DEST_DIR" \
#--no-timestamp
mariabackup --backup --target-dir="$DEST_DIR" --incremental-basedir="${DAY_BACKUP_DIR}${BASE_BACKUP}" --user="$MYSQLUSER" --password="$MYSQLPASS"
;;
'restore')
if [ "`ps aux | grep --only-match mysqld`" != "" ]; then
read -p "I think mysql-server still running. It's STRONGLY recommended to stop it before restoring any backup to avoid corrupted files. Do you want to continue anyway? [Y/N]" yn
case $yn in
[Yy]* ) break;;
* ) exit;;
esac
fi
REQUEST_BACKUP="${BACKUP_PATH}${2}/${3}"
BASE_BACKUP="${BACKUP_PATH}${2}/`ls ${BACKUP_PATH}${2} | grep --max-count=1 --perl-regexp '^.+_BASE'`"
TMP_BACKUP="${BACKUP_PATH}${2}/.current_backup"
if [ ! -d "$REQUEST_BACKUP" ] || [ ! $2 ] || [ ! $3 ]; then
echo -e "${idsCL[Red]}Backup not found!${idsCL[Default]}"
echo "Usage: $0 restore 2019-01-05 13-00-10"
exit 1
fi
if [ -d "$MYSQLDATA" ]; then
mv "$MYSQLDATA" "`grep --perl-regexp --only-match '^.*(?=/$)' <<< ${MYSQLDATA}`_restore-`date +%Y-%m-%d_%H-%M-%S`"
mkdir "$MYSQLDATA"
fi
if [ -d "$TMP_BACKUP" ]; then
rm -rf "$TMP_BACKUP"
fi
cp --recursive "$BASE_BACKUP" "$TMP_BACKUP"
innobackupex --apply-log --redo-only "$TMP_BACKUP"
if [ REQUEST_BACKUP != BASE_BACKUP ]; then
innobackupex --apply-log "$TMP_BACKUP" --incremental-dir="$REQUEST_BACKUP"
fi
innobackupex --apply-log "$TMP_BACKUP"
innobackupex --copy-back "$TMP_BACKUP"
chown -R mysql:mysql "$MYSQLDATA"
rm -rf "$TMP_BACKUP"
;;
'list')
clear
echo ""
echo -e " ${idsCL[LightGreen]}MySQL-BU - M y S Q L B A C K U P S C R I P T S${idsCL[Default]} ${idsCL[DarkGray]}(ver-${VERS})${idsCL[Default]}"
echo -e "${idsCL[LightGreen]}---------------------------------------------------------------------------${idsCL[Default]}"
echo ""
echo -e "${idsCL[LightYellow]}============ Available MySQL Backups ============${idsCL[Default]}"
for day in $BACKUP_PATH* ; do
tdt=`sed 's/.*\///' <<< $day`
bsz=`du -sh ${day} | awk '{print $1}'`
echo -e "${idsBG[Blue]}${idsCL[White]}-> `date -d"${tdt}" +"%a, %B %d, %Y"` - ${bsz} ${idsCL[Default]}${idsBG[Default]}"
for hour in $day/* ; do
thr=`sed 's/.*\///' <<< ${hour//_BASE/}`
bsz=`du -sh ${hour} | awk '{print $1}'`
if [ ${hour: -5} = "_BASE" ]; then
echo -e "${idsCL[LightGreen]}${idsST[Bold]} -> `date -d"${tdt} ${thr//-/:}" +"%I:%M %P"` - FULL BACKUP${idsST[Reset]}${idsCL[LightGreen]} - ${bsz}${idsCL[Default]}"
else
echo -e "${idsCL[Cyan]} -> `date -d"${tdt} ${thr//-/:}" +"%I:%M %P"` - Incremental - ${bsz}${idsCL[Default]}"
fi
done
done
echo -e "${idsCL[Yellow]}=================================================${idsCL[Default]}"
echo ""
;;
'gui')
MAIN_MENU
;; 'delete')
DELETE_MENU
;;
*)
echo "Usage: $0 { gui | backup | backup-base | backup-incremental | restore | list }"
;;
esac
exit 0