#!/bin/bash # Usage: ./backup_script.sh -l true or ./backup_script.sh -l false # Parse command-line argument for local_db flag while getopts "l:" opt; do case $opt in l) LOCAL_DB=$OPTARG ;; *) echo "Usage: $0 -l [true|false]" exit 1 ;; esac done # Validate LOCAL_DB argument if [ "$LOCAL_DB" != "true" ] && [ "$LOCAL_DB" != "false" ]; then echo "Error: Invalid value for -l. Must be 'true' or 'false'." exit 1 fi # Set the database path and backup destination based on LOCAL_DB value if [ "$LOCAL_DB" = true ]; then DB_PATH="/Users/donov/databases/nkode.db" BACKUP_DIR="/var/tmp" else DB_PATH="/home/dkelly/databases/nkode.db" BACKUP_DIR="/var/tmp" fi BACKUP_NAME="backup_nkode_$(date +'%Y%m%d%H%M%S').tar.gz" # Check if the database file exists if [ ! -f "$DB_PATH" ]; then echo "Error: Database file not found at $DB_PATH" exit 1 fi # Perform a WAL checkpoint to flush the WAL file to the main DB file echo "Checkpointing WAL..." sqlite3 "$DB_PATH" "PRAGMA wal_checkpoint(FULL);" if [ $? -ne 0 ]; then echo "Error: Failed to checkpoint WAL" exit 1 fi # Check if related files (.wal, .shm) exist WAL_FILE="${DB_PATH}-wal" SHM_FILE="${DB_PATH}-shm" # Create a list of files to back up (main DB, WAL, and SHM if they exist) FILES_TO_BACKUP=("$DB_PATH") if [ -f "$WAL_FILE" ]; then FILES_TO_BACKUP+=("$WAL_FILE") fi if [ -f "$SHM_FILE" ]; then FILES_TO_BACKUP+=("$SHM_FILE") fi # Create a tar.gz archive of the database and related files echo "Creating backup..." tar -czf "$BACKUP_DIR/$BACKUP_NAME" "${FILES_TO_BACKUP[@]}" if [ $? -eq 0 ]; then echo "Backup successful: $BACKUP_DIR/$BACKUP_NAME" else echo "Error: Backup failed" exit 1 fi # Upload backup to S3 aws s3 cp "$BACKUP_DIR/$BACKUP_NAME" s3://nkode-db-backup if [ $? -eq 0 ]; then echo "Backup uploaded to S3 successfully." else echo "Error: Failed to upload backup to S3." exit 1 fi