back_db.sh 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #!/bin/bash
  2. #
  3. # license: GPL V2.0
  4. # version: 1.3.7
  5. # script author: Koshuba V - stvixfree@gmail.com
  6. # 2022
  7. ## only pgsql & mysql
  8. #
  9. ## dependencies scripts
  10. #<tools_script>
  11. pkgdep=( "postgresql-client" "mariadb-client" "pigz" ); # packages
  12. get_tools=( "pg_dump" "mysqldump" "pigz" ); # tools for script
  13. #</tools_script>
  14. ## only pgsql & mysql
  15. ## the array database name
  16. DBDATA=( "dbname1" "dbname2" "dbname3" );
  17. ## the array backup paths
  18. BACKPATH=( "/arhiv" "/arhiv" "/arhiv" );
  19. ## the array login for databases
  20. LOGINDB=( "dblogin1" "dblogin2" "dblogin3" );
  21. ## the array pass for databases
  22. PASSWDB=( "dbpass1" "dbpass2" "dbpass2" );
  23. ## the array type databases
  24. TYPEDB=( "pgsql" "pgsql" "mysql" )
  25. ## the array hosts
  26. HOSTDB=( "127.0.0.1" "127.0.0.1" "10.1.0.1" )
  27. ## system values
  28. ## log file
  29. LOG_FILE="/var/log/syslog.log";
  30. # - type compress xz (tar) or gz (pigz)
  31. type_arh="xz";
  32. # - core active for pigz
  33. cpu_arh="2";
  34. ## email admin
  35. adminmail="admindb@mydomen.ru";
  36. #
  37. MESS_OK="Резервное копирвание базы $DBNAME выполнено"; # Backup database $ DBNAME done
  38. MESS_FAIL="Ошибка резервного копирования базы $DBNAME"; # Backup database $ DBNAME error
  39. dbname="none";
  40. #########################################################
  41. #<Fn_get-tools>
  42. function getTools() {
  43. for ((itools=0; itools != ${#get_tools[@]}; itools++))
  44. do
  45. checktool=$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}')
  46. if [[ $checktool = "" ]];
  47. then
  48. sudo apt install ${pkgdep[$itools]};
  49. fi
  50. checktool=$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}')
  51. if [[ $checktool != "" ]];
  52. then
  53. eval get_${get_tools[$itools]}=$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}');
  54. list_tools[${#list_tools[@]}]="$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}')";
  55. else
  56. echo "Sorry, there are no required packages to work, please install: ${pkgdep[@]}"
  57. exit 0;
  58. fi
  59. done
  60. backDB;
  61. }
  62. function backDB() {
  63. ## switch type arh
  64. case "$type_arh" in
  65. ## type gz
  66. "gz" | "gz" )
  67. for ((dbinx=0; dbinx != ${#DBDATA[@]}; dbinx++))
  68. do
  69. rdate=$(date +%d-%m-%y_%H-%M);
  70. dbname=${DBDATA[$dbinx]};
  71. rpath=${BACKPATH[$dbinx]};
  72. dbtype=${TYPEDB[$dbinx]};
  73. dblogin=${LOGINDB[$dbinx]}
  74. dbpass=${PASSWDB[$dbinx]}
  75. dbhost=${HOSTDB[$dbinx]}
  76. cd $rpath;
  77. if [ "$dbtype" = "pgsql" ];
  78. then
  79. if [ ! -d $rpath/$dbname ];
  80. then
  81. mkdir -p $rpath/$dbname;
  82. fi
  83. if sudo PGPASSWORD=$dbpass pg_dump -C --host=$dbhost --username=$dblogin --dbname=$dbname |pigz -p$cpu_arh -c9 >$rpath/$dbname/$dbname"-pg_"$rdate.sql.gz
  84. then
  85. echo "$(date) -- backup pgbase (.gz) $MESS_OK">>$LOG_FILE
  86. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup pgbase (.gz) $MESS_OK" $adminmail
  87. else
  88. echo "$(date) -- backup pgbase (.gz) $MESS_FAIL">>$LOG_FILE
  89. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup pgbase (.gz) $MESS_FAIL" $adminmail
  90. fi
  91. fi
  92. if [ "$dbtype" = "mysql" ];
  93. then
  94. if [ ! -d $rpath/$dbname ];
  95. then
  96. mkdir -p $rpath/$dbname;
  97. fi
  98. if sudo mysqldump -v -h$dbhost -u$dblogin -p$dbpass $dbname |pigz -p$cpu_arh -c9 >$rpath/$dbname/$dbname"-mysql_"$rdate.sql.gz
  99. then
  100. echo "$(date) -- backup mysqlbase $MESS_OK">>$LOG_FILE
  101. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup mysqlbase $MESS_OK" $adminmail
  102. else
  103. echo "$(date) -- backup mysqlbase $MESS_FAIL">>$LOG_FILE
  104. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup mysqlbase $MESS_FAIL" $adminmail
  105. fi
  106. fi
  107. cd;
  108. done
  109. ;;
  110. ## type xz or default
  111. * )
  112. for ((dbinx=0; dbinx != ${#DBDATA[@]}; dbinx++))
  113. do
  114. rdate=$(date +%d-%m-%y_%H-%M);
  115. dbname=${DBDATA[$dbinx]};
  116. rpath=${BACKPATH[$dbinx]};
  117. dbtype=${TYPEDB[$dbinx]};
  118. dblogin=${LOGINDB[$dbinx]}
  119. dbpass=${PASSWDB[$dbinx]}
  120. dbhost=${HOSTDB[$dbinx]}
  121. cd $rpath;
  122. if [ "$dbtype" = "pgsql" ];
  123. then
  124. if [ ! -d $rpath/$dbname ];
  125. then
  126. mkdir -p $rpath/$dbname;
  127. fi
  128. if sudo PGPASSWORD=$dbpass pg_dump -C --host=$dbhost --username=$dblogin --dbname=$dbname > $rpath/$dbname/$dbname"-pg_"$rdate.sql
  129. then
  130. tar -cJf $rpath/$dbname/$dbname"_"$rdate.tar.xz $rpath/$dbname/$dbname"-pg_"$rdate.sql;
  131. rm $rpath/$dbname/$dbname"-pg_"$rdate.sql;
  132. echo "$(date) -- backup pgbase $MESS_OK">>$LOG_FILE
  133. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup pgbase $MESS_OK" $adminmail
  134. else
  135. echo "$(date) -- backup pgbase $MESS_FAIL">>$LOG_FILE
  136. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup pgbase $MESS_FAIL" $adminmail
  137. fi
  138. fi
  139. if [ "$dbtype" = "mysql" ];
  140. then
  141. if [ ! -d $rpath/$dbname ];
  142. then
  143. mkdir -p $rpath/$dbname;
  144. fi
  145. if sudo mysqldump -v -h$dbhost -u$dblogin -p$dbpass $dbname > $rpath/$dbname/$dbname"-mysql_"$rdate.sql
  146. then
  147. tar -cJf $rpath/$dbname/$dbname"-mysql_"$rdate.tar.xz $rpath/$dbname/$dbname"-mysql_"$rdate.sql;
  148. rm $rpath/$dbname/$dbname"-mysql_"$rdate.sql;
  149. echo "$(date) -- backup mysqlbase $MESS_OK">>$LOG_FILE
  150. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup mysqlbase $MESS_OK" $adminmail
  151. else
  152. echo "$(date) -- backup mysqlbase $MESS_FAIL">>$LOG_FILE
  153. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup mysqlbase $MESS_FAIL" $adminmail
  154. fi
  155. fi
  156. cd;
  157. done
  158. ;;
  159. esac
  160. }
  161. getTools;
  162. exit 0