v-dump-database 2.9 KB

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