Files
basango/apps/api-legacy/bin/backup.sh
T

53 lines
1.4 KiB
Bash

#!/usr/bin/env bash
# Get the script directory and define data directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DATA_DIR="${SCRIPT_DIR}/../data"
DUMP_FILE="${DATA_DIR}/data.sql"
ARCHIVE_FILE="${DUMP_FILE}.gz"
# Ensure data directory exists
mkdir -p "$DATA_DIR"
# Load environment variables from .env.local
set -a
if [ -f "${SCRIPT_DIR}/../.env.local" ]; then
export "$(grep -v '^#' "${SCRIPT_DIR}/../.env.local" | grep '=' | xargs)"
fi
set +a
# Parse DATABASE_URL into components
if [[ -z "$DATABASE_URL" ]]; then
echo "DATABASE_URL is not set in .env.local"
exit 1
fi
regex="^mysql:\/\/([^:]+):([^@]+)@([^:]+):([0-9]+)\/([^?]+)"
if [[ "$DATABASE_URL" =~ $regex ]]; then
DB_USER="${BASH_REMATCH[1]}"
DB_PASSWORD="${BASH_REMATCH[2]}"
DB_HOST="${BASH_REMATCH[3]}"
DB_PORT="${BASH_REMATCH[4]}"
DB_NAME="${BASH_REMATCH[5]}"
else
echo "Invalid DATABASE_URL format"
exit 1
fi
# Step 1: Dump the database
mysqldump --host="${DB_HOST}" --port="${DB_PORT}" \
--user="${DB_USER}" --password="${DB_PASSWORD}" \
--max_allowed-packet=1G --net-buffer-length=32704 --skip-extended-insert \
"${DB_NAME}" > "$DUMP_FILE"
gzip -f "$DUMP_FILE"
# Step 2: Send the file to Telegram
curl -F "chat_id=${DEVY_CHANNEL}" \
-F "message_thread_id=${DEVY_TOPIC}" \
-F "document=@${ARCHIVE_FILE}" \
"https://api.telegram.org/bot${DEVY_TOKEN}/sendDocument"
# Step 3: Clean up
rm -f "$ARCHIVE_FILE" "$DUMP_FILE"