back_db.sh 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/bin/bash
  2. #
  3. # license: GPL V2.0
  4. # version: 1.3.5
  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=( "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. ## log file
  28. LOG_FILE="/var/log/syslog.log";
  29. #
  30. ## email admin
  31. adminmail="admindb@mydomen.ru";
  32. #
  33. MESS_OK="Резервное копирвание базы $DBNAME выполнено"; # Backup database $ DBNAME done
  34. MESS_FAIL="Ошибка резервного копирования базы $DBNAME"; # Backup database $ DBNAME error
  35. dbname="none";
  36. #########################################################
  37. #<Fn_get-tools>
  38. function getTools() {
  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. function backDB() {
  59. for ((dbinx=0; dbinx != ${#DBDATA[@]}; dbinx++))
  60. do
  61. rdate=$(date +%d-%m-%y_%H-%M);
  62. dbname=${DBDATA[$dbinx]};
  63. rpath=${BACKPATH[$dbinx]};
  64. dbtype=${TYPEDB[$dbinx]};
  65. dblogin=${LOGINDB[$dbinx]}
  66. dbpass=${PASSWDB[$dbinx]}
  67. dbhost=${HOSTDB[$dbinx]}
  68. cd $rpath;
  69. if [ "$dbtype" = "pgsql" ];
  70. then
  71. if [ ! -d $rpath/$dbname ];
  72. then
  73. mkdir -p $rpath/$dbname;
  74. fi
  75. if sudo PGPASSWORD=$dbpass pg_dump -C --host=$dbhost --username=$dblogin --dbname=$dbname > $rpath/$dbname/$dbname"_"$rdate.sql
  76. then
  77. tar -cJf $rpath/$dbname/$dbname"_"$rdate.tar.xz $rpath/$dbname/$dbname"_"$rdate.sql;
  78. rm $rpath/$dbname/$dbname"_"$rdate.sql;
  79. echo "$(date) -- backup pgbase $MESS_OK">>$LOG_FILE
  80. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup pgbase $MESS_OK" $adminmail
  81. else
  82. echo "$(date) -- backup pgbase $MESS_FAIL">>$LOG_FILE
  83. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup pgbase $MESS_FAIL" $adminmail
  84. fi
  85. fi
  86. if [ "$dbtype" = "mysql" ];
  87. then
  88. if [ ! -d $rpath/$dbname ];
  89. then
  90. mkdir -p $rpath/$dbname;
  91. fi
  92. if sudo mysqldump -v -h$dbhost -u$dblogin -p$dbpass $dbname > $rpath/$dbname/$dbname"_"$rdate.sql
  93. then
  94. tar -cJf $rpath/$dbname/$dbname"_"$rdate.tar.xz $rpath/$dbname/$dbname"_"$rdate.sql;
  95. rm $rpath/$dbname/$dbname"_"$rdate.sql;
  96. echo "$(date) -- backup mysqlbase $MESS_OK">>$LOG_FILE
  97. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup mysqlbase $MESS_OK" $adminmail
  98. else
  99. echo "$(date) -- backup mysqlbase $MESS_FAIL">>$LOG_FILE
  100. date|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$(date) -- backup mysqlbase $MESS_FAIL" $adminmail
  101. fi fi
  102. cd;
  103. done
  104. }
  105. getTools;
  106. exit 0