| Server IP : 202.61.199.114 / Your IP : 216.73.217.139 Web Server : nginx/1.22.1 System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64 User : web20 ( 1018) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/clients/client1/web16/web/scripts/ |
Upload File : |
#!/usr/bin/env bash
# Leert die operativen Datentabellen von pacim_saas, behält Stammdaten + Einstellungen
# (events, products, organizers, settings, users, payment_methods, …) und das Schema selbst.
#
# Geleert werden:
# - DB-Tabellen: bookings, invoices, invoice_items, booking_products, payments,
# pdf_documents, history_log, files, aida_prebookings, checkins,
# customers, messages, import_batches, import_files, import_runs
# - Datei-Archive: data/trash/* (komplett, inkl. Datums-Unterordner)
# data/aida/* (Inbox)
#
# Aufruf:
# ./scripts/truncate-data.sh # mit Sicherheitsabfrage
# ./scripts/truncate-data.sh --yes # ohne Rückfrage
set -e
HOST="localhost"
USER="root"
PASS="root"
DB="pacim_saas"
# Wurzel relativ zum Script-Verzeichnis ermitteln, damit der Aufruf von beliebigen Pfaden funktioniert.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
TABLES=(
bookings
invoices
invoice_items
booking_products
payments
pdf_documents
history_log
files
aida_prebookings
checkins
customers
messages
import_batches
import_files
import_runs
)
FILE_DIRS=(
"$ROOT_DIR/data/trash"
"$ROOT_DIR/data/aida"
)
echo "=========================================="
echo " PaCIM · Tabellen + Datei-Archive leeren ($DB)"
echo " Ziel-Tabellen: ${TABLES[*]}"
echo " Ziel-Ordner: ${FILE_DIRS[*]}"
echo "=========================================="
if [ "${1:-}" != "--yes" ]; then
read -p "Wirklich leeren? (yes/n): " ans
if [ "$ans" != "yes" ]; then
echo "Abgebrochen."
exit 1
fi
fi
# Foreign-Key-Checks temporär aus, dann TRUNCATE pro Tabelle.
# TRUNCATE setzt AUTO_INCREMENT zurück; reine DELETEs würden das nicht tun.
SQL="SET FOREIGN_KEY_CHECKS=0;"
for t in "${TABLES[@]}"; do
SQL+=" TRUNCATE TABLE \`$t\`;"
done
SQL+=" SET FOREIGN_KEY_CHECKS=1;"
mysql -h "$HOST" -u "$USER" -p"$PASS" "$DB" -e "$SQL"
# Datei-Archive leeren — alles unterhalb der Ordner inklusive Unterordner.
# `.gitkeep` und andere Dot-Files an der Wurzel bleiben erhalten, damit Git die Ordner behält.
for dir in "${FILE_DIRS[@]}"; do
if [ -d "$dir" ]; then
# Find: alles im Ordner außer dem Ordner selbst und .gitkeep löschen.
find "$dir" -mindepth 1 ! -name '.gitkeep' -exec rm -rf {} + 2>/dev/null || true
fi
done
echo ""
echo "Fertig. Folgende Tabellen sind jetzt leer:"
for t in "${TABLES[@]}"; do
cnt=$(mysql -h "$HOST" -u "$USER" -p"$PASS" -N -e "SELECT COUNT(*) FROM \`$DB\`.\`$t\`;")
printf " %-20s %s rows\n" "$t" "$cnt"
done
echo ""
echo "Datei-Archive:"
for dir in "${FILE_DIRS[@]}"; do
if [ -d "$dir" ]; then
# Anzahl verbleibender Einträge (ohne .gitkeep) zählen — sollte 0 sein.
cnt=$(find "$dir" -mindepth 1 ! -name '.gitkeep' 2>/dev/null | wc -l | tr -d ' ')
printf " %-30s %s Einträge übrig\n" "${dir#$ROOT_DIR/}" "$cnt"
else
printf " %-30s (Ordner nicht vorhanden)\n" "${dir#$ROOT_DIR/}"
fi
done