# suggested cron entry
# 5 4 * * * /var/www/PRODUCTION.poscloud/httpdocs/db_backup.sh -cr

# --------------------------------------------------------------------------------------------------------------------------------- get Options [-] -#

compress_output=false
remove_original=false

while getopts "cr" opt; do
  case $opt in
  c) compress_output=true ;;
  r) remove_original=true ;;
  \?) echo "Invalid option: -$OPTARG" >&2 ;;
  :)
    echo "Option -$OPTARG requires an argument." >&2
    exit 1
    ;;
  esac
done

# -------------------------------------------------------------------------------------------------------------------------- load Env Variables [-] -#
# get the variables from .env file
export $(grep -v '^#' .env | xargs -d '\n')

DATE=$(date +%Y-%m-%d_%H-%M)
FILE_PATH=/var/opt/backups/"$DB_DATABASE"_"$DATE"


# ---------------------------------------------------------------------------------------------------------------------------- start The Backup [-] -#
echo "Taking database backup for: '$DB_DATABASE'"

echo "Dumping sql to: '$FILE_PATH.sql'..."
export MYSQL_PWD="$DB_PASSWORD"
mysqldump "$DB_DATABASE" > "$FILE_PATH".sql

if [ "$compress_output" = true ]; then
  # - archive option 1: tar the output
  # compression ratio ~12%
  # compression time ~1GB/m
  echo "Tarring the sql dump into: '$FILE_PATH.sql.tar.gz'"
  tar -czvf "$FILE_PATH".sql.tar.gz "$FILE_PATH".sql

  # - archive option 2: 7z compressed output
  # compression ratio ~?%
  # compression time ~?GB/m
  #echo "Tarring and 7-zipping the file into: '$FILE_PATH.tar.7z'"
  #7z a -t7z -mx=9 -mfb=2731 -ms -mtm=- -mmt -mmf=bt3 -mmc=10000 -mpb=0 -mlc=0 "$FILE_PATH".tar.7z "$FILE_PATH"
fi

if [ "$remove_original" = true ] && [ "$compress_output" = true ]; then
  echo "Removing sql file: '$FILE_PATH.sql'..."
  rm "$FILE_PATH".sql
fi

echo "Backup complete!"
