#!/bin/bash
#
# license: GPL V2.0
# version: 1.3.2
# script author: Koshuba V - stvixfree@gmail.com
# 2022
## only pgsql & mysql
#
## dependencies scripts
#
pkgdep=("postgresql-client" "mariadb-client"); # packages
get_tools=( "pg_dump" "mysqldump" ); # tools for script
#
## only pgsql & mysql
## the array database name
DBDATA=( "base1" "base2" );
## the array backup paths
BACKPATH=( "/backup/db" "/backup/db" );
## the array login for databases
LOGINDB=( "dblogin1" "dblogin2" );
## the array pass for databases
PASSWDB=( "mypassdb1" "mypassdb2" );
## the array type databases
TYPEDB=( "pgsql" "mysql" )
## the array hosts
HOSTDB=( "10.1.0.2" "10.1.0.7" )
## log file
LOG_FILE="/var/log/syslog.log";
#
MESS_OK="Резервное копирвание базы $DBNAME выполнено"; # Backup database $ DBNAME done
MESS_FAIL="Ошибка резервного копирования базы $DBNAME"; # Backup database $ DBNAME error
dbname="none";
#########################################################
#
function getTools() {
for ((itools=0; itools != ${#get_tools[@]}; itools++))
do
checktool=$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}')
if [[ $checktool = "" ]];
then
sudo apt install ${pkgdep[$itools]};
fi
checktool=$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}')
if [[ $checktool != "" ]];
then
eval get_${get_tools[$itools]}=$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}');
list_tools[${#list_tools[@]}]="$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}')";
else
echo "Sorry, there are no required packages to work, please install: ${pkgdep[@]}"
exit 0;
fi
done
backDB;
}
function backDB() {
for ((dbinx=0; dbinx != ${#DBDATA[@]}; dbinx++))
do
rdate=$(date +%d%m%y);
dbname=${DBDATA[$dbinx]};
rpath=${BACKPATH[$dbinx]};
dbtype=${TYPEDB[$dbinx]};
dblogin=${LOGINDB[$dbinx]}
dbpass=${PASSWDB[$dbinx]}
dbhost=${HOSTDB[$dbinx]}
cd $rpath;
if [ "$dbtype" = "pgsql" ];
then
if [ ! -d $rpath/$dbname ];
then
mkdir -p $rpath/$dbname;
fi
sudo pg_dump -h$dbhost -u$dblogin -p$dbpass $dbname > $rpath/$dbname/$dbname"_"$rdate.sql
tar -cJf $rpath/$dbname/$dbname"_"$rdate.tar.xz $rpath/$dbname/$dbname"_"$rdate.sql;
rm $rpath/$dbname/$dbname"_"$rdate.sql
echo "$(date) -- backup pgbase $MESS_OK">>$LOG_FILE
date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup pgbase $MESS_OK" admin@spikcom.ru
fi
if [ "$dbtype" = "mysql" ];
then
if [ ! -d $rpath/$dbname ];
then
mkdir -p $rpath/$dbname;
fi
sudo mysqldump -v -h$dbhost -u$dblogin -p$dbpass $dbname | pigz -c9 > $rpath/$dbname/$dbname"_"$rdate.sql.gz
echo "$(date) -- backup mysqlbase $MESS_OK">>$LOG_FILE
date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup mysqlbase $MESS_OK" admin@spikcom.ru
fi
cd;
done
}
getTools;
exit 0