#!/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