back_db.sh 3.0 KB

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