#!/bin/bash # Export auth and character databases to ExportBackup_/ set -euo pipefail usage(){ cat < Creates a timestamped backup of the auth and character databases. Arguments: [output_dir] Output directory (default: .) MySQL root password (required) Auth database name (required) Characters database name (required) Outputs: ExportBackup_YYYYMMDD_HHMMSS/ acore_auth.sql.gz acore_characters.sql.gz manifest.json Services stay online; backup uses mysqldump. EOF } case "${1:-}" in -h|--help) usage; exit 0;; esac MYSQL_PW="$2" DB_AUTH="$3" DB_CHAR="$4" # Check if required parameters are provided if [[ -z "$MYSQL_PW" ]]; then echo "Error: MySQL password required as second argument." >&2 exit 1 fi if [[ -z "$DB_AUTH" ]]; then echo "Error: Auth database name required as third argument." >&2 exit 1 fi if [[ -z "$DB_CHAR" ]]; then echo "Error: Characters database name required as fourth argument." >&2 exit 1 fi DEST_PARENT="${1:-.}" TIMESTAMP="$(date +%Y%m%d_%H%M%S)" DEST_DIR="${DEST_PARENT%/}/ExportBackup_${TIMESTAMP}" mkdir -p "$DEST_DIR" dump_db(){ local db="$1" outfile="$2" echo "Dumping $db -> $outfile" docker exec ac-mysql mysqldump -uroot -p"$MYSQL_PW" "$db" | gzip > "$outfile" } dump_db "$DB_AUTH" "$DEST_DIR/acore_auth.sql.gz" dump_db "$DB_CHAR" "$DEST_DIR/acore_characters.sql.gz" cat > "$DEST_DIR/manifest.json" <