CCCPaste

WordOps Backup DB ONly

#!/bin/bash
# -----------------------------------------------
# WordPress DB + wp-config.php backup per domain
# by ChatGPT
# -----------------------------------------------

BACKUP_ROOT="$HOME/backup"
DATE=$(date +%Y%m%d_%H%M%S)

# Pastikan folder backup root ada
mkdir -p "$BACKUP_ROOT"

# Loop semua domain yang punya wp-config.php
for WPCONFIG in /var/www/*/wp-config.php; do
    [ -f "$WPCONFIG" ] || continue

    DOMAIN=$(basename "$(dirname "$WPCONFIG")")
    DEST="$BACKUP_ROOT/$DOMAIN"
    mkdir -p "$DEST"

    echo "🔹 Backup domain: $DOMAIN"

    # Ambil credential dari wp-config.php
    DB_NAME=$(grep "DB_NAME" "$WPCONFIG" | cut -d "'" -f 4)
    DB_USER=$(grep "DB_USER" "$WPCONFIG" | cut -d "'" -f 4)
    DB_PASS=$(grep "DB_PASSWORD" "$WPCONFIG" | cut -d "'" -f 4)
    DB_HOST=$(grep "DB_HOST" "$WPCONFIG" | cut -d "'" -f 4)

    # Nama file backup
    SQL_FILE="$DEST/db_${DB_NAME}_${DATE}.sql"
    CONFIG_FILE="$DEST/wp-config_${DATE}.php"

    # Backup database
    echo "  ➤ Dumping database: $DB_NAME"
    mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$SQL_FILE" 2>/dev/null

    if [ $? -eq 0 ]; then
        echo "  ✅ DB backup done: $SQL_FILE"
    else
        echo "  ❌ ERROR: Gagal dump database $DB_NAME"
        rm -f "$SQL_FILE"
    fi

    # Backup wp-config.php
    cp "$WPCONFIG" "$CONFIG_FILE"
    echo "  ✅ Config backup done: $CONFIG_FILE"
    echo "-----------------------------------------------"
done

echo "🎉 Semua backup selesai! Lokasi: $BACKUP_ROOT"