| 
				
			 | 
			
			
				@@ -1,9 +1,17 @@ 
			 | 
		
	
		
			
			| 
				
					1
				
			 | 
			
				
					1
				
			 | 
			
			
				 #!/bin/bash 
			 | 
		
	
		
			
			| 
				
					2
				
			 | 
			
				
					2
				
			 | 
			
			
				 # 
			 | 
		
	
		
			
			| 
				
					3
				
			 | 
			
				
					3
				
			 | 
			
			
				 # license: GPL V2.0 
			 | 
		
	
		
			
			| 
				
					4
				
			 | 
			
				
			 | 
			
			
				-# version: 1.3.0 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					4
				
			 | 
			
			
				+# version: 1.3.2 
			 | 
		
	
		
			
			| 
				
					5
				
			 | 
			
				
					5
				
			 | 
			
			
				 # script author: Koshuba V - stvixfree@gmail.com 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					6
				
			 | 
			
			
				+# 2022 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					7
				
			 | 
			
			
				+## only pgsql & mysql 
			 | 
		
	
		
			
			| 
				
					6
				
			 | 
			
				
					8
				
			 | 
			
			
				 # 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					9
				
			 | 
			
			
				+## dependencies scripts 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					10
				
			 | 
			
			
				+#<tools_script> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					11
				
			 | 
			
			
				+pkgdep=("postgresql-client" "mariadb-client");	# packages 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					12
				
			 | 
			
			
				+get_tools=( "pg_dump" "mysqldump"  ); 		# tools for script 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					13
				
			 | 
			
			
				+#</tools_script> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					14
				
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
					7
				
			 | 
			
				
					15
				
			 | 
			
			
				 ## only pgsql & mysql 
			 | 
		
	
		
			
			| 
				
					8
				
			 | 
			
				
					16
				
			 | 
			
			
				 ## the array database name 
			 | 
		
	
		
			
			| 
				
					9
				
			 | 
			
				
					17
				
			 | 
			
			
				 DBDATA=( "base1" "base2" ); 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -15,14 +23,41 @@ LOGINDB=( "dblogin1" "dblogin2" ); 
			 | 
		
	
		
			
			| 
				
					15
				
			 | 
			
				
					23
				
			 | 
			
			
				 PASSWDB=( "mypassdb1" "mypassdb2" ); 
			 | 
		
	
		
			
			| 
				
					16
				
			 | 
			
				
					24
				
			 | 
			
			
				 ## the array type databases 
			 | 
		
	
		
			
			| 
				
					17
				
			 | 
			
				
					25
				
			 | 
			
			
				 TYPEDB=( "pgsql" "mysql" ) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					26
				
			 | 
			
			
				+## the array hosts 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					27
				
			 | 
			
			
				+HOSTDB=( "10.1.0.2" "10.1.0.7" ) 
			 | 
		
	
		
			
			| 
				
					18
				
			 | 
			
				
					28
				
			 | 
			
			
				 ## log file 
			 | 
		
	
		
			
			| 
				
					19
				
			 | 
			
				
					29
				
			 | 
			
			
				 LOG_FILE="/var/log/syslog.log"; 
			 | 
		
	
		
			
			| 
				
					20
				
			 | 
			
				
			 | 
			
			
				-## messages 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					30
				
			 | 
			
			
				+# 
			 | 
		
	
		
			
			| 
				
					21
				
			 | 
			
				
					31
				
			 | 
			
			
				 MESS_OK="Резервное копирвание базы $DBNAME выполнено"; # Backup database $ DBNAME done 
			 | 
		
	
		
			
			| 
				
					22
				
			 | 
			
				
					32
				
			 | 
			
			
				 MESS_FAIL="Ошибка резервного копирования базы $DBNAME"; # Backup database $ DBNAME error 
			 | 
		
	
		
			
			| 
				
					23
				
			 | 
			
				
			 | 
			
			
				-## intermediate values 
			 | 
		
	
		
			
			| 
				
					24
				
			 | 
			
				
					33
				
			 | 
			
			
				 dbname="none"; 
			 | 
		
	
		
			
			| 
				
					25
				
			 | 
			
				
					34
				
			 | 
			
			
				 ######################################################### 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					35
				
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					36
				
			 | 
			
			
				+#<Fn_get-tools> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					37
				
			 | 
			
			
				+function getTools() { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					38
				
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					39
				
			 | 
			
			
				+for ((itools=0; itools != ${#get_tools[@]}; itools++)) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					40
				
			 | 
			
			
				+ do 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					41
				
			 | 
			
			
				+checktool=$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}') 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					42
				
			 | 
			
			
				+if [[ $checktool = "" ]]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					43
				
			 | 
			
			
				+    then 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					44
				
			 | 
			
			
				+	sudo apt install ${pkgdep[$itools]}; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					45
				
			 | 
			
			
				+fi 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					46
				
			 | 
			
			
				+checktool=$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}') 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					47
				
			 | 
			
			
				+if [[ $checktool != "" ]]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					48
				
			 | 
			
			
				+    then 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					49
				
			 | 
			
			
				+	eval get_${get_tools[$itools]}=$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}'); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					50
				
			 | 
			
			
				+	list_tools[${#list_tools[@]}]="$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}')"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					51
				
			 | 
			
			
				+    else 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					52
				
			 | 
			
			
				+	echo "Sorry, there are no required packages to work, please install: ${pkgdep[@]}" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					53
				
			 | 
			
			
				+	exit 0; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					54
				
			 | 
			
			
				+fi 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					55
				
			 | 
			
			
				+done 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					56
				
			 | 
			
			
				+backDB; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					57
				
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					58
				
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					59
				
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					60
				
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
					26
				
			 | 
			
				
					61
				
			 | 
			
			
				 function backDB() { 
			 | 
		
	
		
			
			| 
				
					27
				
			 | 
			
				
					62
				
			 | 
			
			
				 for ((dbinx=0; dbinx != ${#DBDATA[@]}; dbinx++)) 
			 | 
		
	
		
			
			| 
				
					28
				
			 | 
			
				
					63
				
			 | 
			
			
				     do 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -32,26 +67,34 @@ for ((dbinx=0; dbinx != ${#DBDATA[@]}; dbinx++)) 
			 | 
		
	
		
			
			| 
				
					32
				
			 | 
			
				
					67
				
			 | 
			
			
				     dbtype=${TYPEDB[$dbinx]}; 
			 | 
		
	
		
			
			| 
				
					33
				
			 | 
			
				
					68
				
			 | 
			
			
				     dblogin=${LOGINDB[$dbinx]} 
			 | 
		
	
		
			
			| 
				
					34
				
			 | 
			
				
					69
				
			 | 
			
			
				     dbpass=${PASSWDB[$dbinx]} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					70
				
			 | 
			
			
				+    dbhost=${HOSTDB[$dbinx]} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					71
				
			 | 
			
			
				+    cd $rpath; 
			 | 
		
	
		
			
			| 
				
					35
				
			 | 
			
				
					72
				
			 | 
			
			
				     if [ "$dbtype" = "pgsql" ]; 
			 | 
		
	
		
			
			| 
				
					36
				
			 | 
			
				
					73
				
			 | 
			
			
				      then 
			 | 
		
	
		
			
			| 
				
					37
				
			 | 
			
				
			 | 
			
			
				-	sudo -u postgres pg_dump -C $dbname > $rpath/$dbname"_"$rdate.sql 
			 | 
		
	
		
			
			| 
				
					38
				
			 | 
			
				
			 | 
			
			
				-	tar -cJf $rpath/$dbname"_"$rdate.tar.xz $rpath/$dbname"_"$rdate.sql; 
			 | 
		
	
		
			
			| 
				
					39
				
			 | 
			
				
			 | 
			
			
				-	rm $rpath/$dbname"_"$rdate.sql; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					74
				
			 | 
			
			
				+	if [ ! -d $rpath/$dbname ]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					75
				
			 | 
			
			
				+    	    then 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					76
				
			 | 
			
			
				+	    mkdir -p $rpath/$dbname; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					77
				
			 | 
			
			
				+	    fi 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					78
				
			 | 
			
			
				+	sudo pg_dump -h$dbhost -u$dblogin -p$dbpass $dbname > $rpath/$dbname/$dbname"_"$rdate.sql 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					79
				
			 | 
			
			
				+	tar -cJf $rpath/$dbname/$dbname"_"$rdate.tar.xz $rpath/$dbname/$dbname"_"$rdate.sql; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					80
				
			 | 
			
			
				+	rm $rpath/$dbname/$dbname"_"$rdate.sql 
			 | 
		
	
		
			
			| 
				
					40
				
			 | 
			
				
					81
				
			 | 
			
			
				 	echo "$(date) -- backup pgbase $MESS_OK">>$LOG_FILE 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					82
				
			 | 
			
			
				+	date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup pgbase $MESS_OK" admin@spikcom.ru 
			 | 
		
	
		
			
			| 
				
					41
				
			 | 
			
				
					83
				
			 | 
			
			
				     fi 
			 | 
		
	
		
			
			| 
				
					42
				
			 | 
			
				
					84
				
			 | 
			
			
				     if [ "$dbtype" = "mysql" ]; 
			 | 
		
	
		
			
			| 
				
					43
				
			 | 
			
				
					85
				
			 | 
			
			
				      then 
			 | 
		
	
		
			
			| 
				
					44
				
			 | 
			
				
			 | 
			
			
				-	mysqldump -u $dblogin -p$dbpass $dbname| gzip > $rpath/$dbname"_"$rdate.sql.gz 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					86
				
			 | 
			
			
				+	if [ ! -d $rpath/$dbname ]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					87
				
			 | 
			
			
				+    	    then 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					88
				
			 | 
			
			
				+	    mkdir -p $rpath/$dbname; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					89
				
			 | 
			
			
				+	    fi 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					90
				
			 | 
			
			
				+	sudo mysqldump -v -h$dbhost -u$dblogin -p$dbpass $dbname | pigz -c9 > $rpath/$dbname/$dbname"_"$rdate.sql.gz 
			 | 
		
	
		
			
			| 
				
					45
				
			 | 
			
				
					91
				
			 | 
			
			
				 	echo "$(date) -- backup mysqlbase $MESS_OK">>$LOG_FILE 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					92
				
			 | 
			
			
				+	date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup mysqlbase $MESS_OK" admin@spikcom.ru 
			 | 
		
	
		
			
			| 
				
					46
				
			 | 
			
				
					93
				
			 | 
			
			
				     fi 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					94
				
			 | 
			
			
				+    cd; 
			 | 
		
	
		
			
			| 
				
					47
				
			 | 
			
				
					95
				
			 | 
			
			
				 done 
			 | 
		
	
		
			
			| 
				
					48
				
			 | 
			
				
					96
				
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				
					49
				
			 | 
			
				
					97
				
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
					50
				
			 | 
			
				
			 | 
			
			
				-if [ ! -d $BACKPATH ]; 
			 | 
		
	
		
			
			| 
				
					51
				
			 | 
			
				
			 | 
			
			
				-     then 
			 | 
		
	
		
			
			| 
				
					52
				
			 | 
			
				
			 | 
			
			
				-	mkdir -p $BACKPATH; 
			 | 
		
	
		
			
			| 
				
					53
				
			 | 
			
				
			 | 
			
			
				-fi 
			 | 
		
	
		
			
			| 
				
					54
				
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				
					55
				
			 | 
			
				
			 | 
			
			
				-backDB; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					98
				
			 | 
			
			
				+getTools; 
			 | 
		
	
		
			
			| 
				
					56
				
			 | 
			
				
					99
				
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
					57
				
			 | 
			
				
					100
				
			 | 
			
			
				 exit 0 
			 |