v-dump-database 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #!/bin/bash
  2. # info: Dumps database contents in STDIN / file
  3. # options: USER DATABASE [FILE]
  4. #
  5. # example: v-dump-database user user_databse > test.sql
  6. # example: v-dump-database user user_databse file
  7. #
  8. # Dumps database in STDIN or /backup/user.database.type.sql
  9. #----------------------------------------------------------#
  10. # Variables & Functions #
  11. #----------------------------------------------------------#
  12. # Argument definition
  13. user=$1
  14. database=$2
  15. output=$3
  16. # Includes
  17. # shellcheck source=/etc/hestiacp/hestia.conf
  18. source /etc/hestiacp/hestia.conf
  19. # shellcheck source=/usr/local/hestia/func/main.sh
  20. source $HESTIA/func/main.sh
  21. # shellcheck source=/usr/local/hestia/func/db.sh
  22. source $HESTIA/func/db.sh
  23. # load config file
  24. source_conf "$HESTIA/conf/hestia.conf"
  25. check_args '2' "$#" 'USER DATABASE'
  26. is_format_valid 'user' 'database'
  27. is_system_enabled "$DB_SYSTEM" 'DB_SYSTEM'
  28. is_object_valid 'user' 'USER' "$user"
  29. is_object_unsuspended 'user' 'USER' "$user"
  30. # Perform verification if read-only mode is enabled
  31. check_hestia_demo_mode
  32. #----------------------------------------------------------#
  33. # Action #
  34. #----------------------------------------------------------#
  35. # Create timestamp in Y-M-D_h-m-s format
  36. timestamp=$(date +'%G-%m-%d_%H-%M-%S')
  37. # Check db existence
  38. db_data=$(grep "DB='$database'" $HESTIA/data/users/$user/db.conf)
  39. if [ -z "$db_data" ]; then
  40. echo "Error: database $database doesn't exist"
  41. log_event "$E_NOTEXIST" "$ARGUMENTS"
  42. exit "$E_NOTEXIST"
  43. fi
  44. parse_object_kv_list "$db_data"
  45. # Creating temporary directory
  46. tmpdir=$(mktemp -p $BACKUP -d "tmp.$database.XXXXXXXXXX")
  47. # Dump database
  48. dump="$tmpdir/$database.$TYPE.sql"
  49. grants="$tmpdir/$database.$TYPE.$DBUSER"
  50. case $TYPE in
  51. mysql) dump_mysql_database ;;
  52. pgsql) dump_pgsql_database ;;
  53. esac
  54. if [ "$output" = "file" ]; then
  55. # echo filename for use in the php
  56. echo "${user}_${database}_${TYPE}_${timestamp}.sql"
  57. cp $dump $BACKUP/${user}_${database}_${TYPE}_${timestamp}.sql
  58. # echo file location for use in the php
  59. echo "$BACKUP/${user}_${database}_${TYPE}_${timestamp}.sql"
  60. # cleanup
  61. echo "rm $BACKUP/${user}_${database}_${TYPE}_${timestamp}.sql" | at now + 1 hour
  62. else
  63. cat $dump
  64. fi
  65. rm -fr $tmpdir
  66. #----------------------------------------------------------#
  67. # Hestia #
  68. #----------------------------------------------------------#
  69. # Logging
  70. log_event "$OK" "$ARGUMENTS"
  71. exit