diff --git a/scripts/db-export.sh b/scripts/db-export.sh index 1159b9c..c245ef2 100644 --- a/scripts/db-export.sh +++ b/scripts/db-export.sh @@ -43,6 +43,15 @@ require_running_db() { fi } +# Returns space-separated list of user databases (excludes MySQL system schemas) +get_user_databases() { + docker compose exec -T ac-database bash -lc \ + "mysql -h 127.0.0.1 -uroot -p\"\$MYSQL_ROOT_PASSWORD\" -N -s information_schema" \ + <<<"SELECT schema_name FROM schemata + WHERE schema_name NOT IN ('mysql','information_schema','performance_schema','sys') + ORDER BY schema_name;" +} + # ── argument parsing ────────────────────────────────────────────────────────── while (($#)); do @@ -73,13 +82,17 @@ fi mkdir -p "$(dirname "$OUTPUT_FILE")" -log "exporting all databases → $OUTPUT_FILE" +log "discovering user databases..." +databases="$(get_user_databases | tr '\n' ' ' | xargs)" +[[ -z "$databases" ]] && die "no user databases found" +log "databases: $databases" +log "exporting → $OUTPUT_FILE" log "this may take a few minutes for large worlds..." if [[ "$COMPRESS" -eq 1 ]]; then docker compose exec -T ac-database bash -lc \ - "mysqldump -uroot -p\"\$MYSQL_ROOT_PASSWORD\" \ - --all-databases \ + "mysqldump -h 127.0.0.1 -uroot -p\"\$MYSQL_ROOT_PASSWORD\" \ + --databases $databases \ --add-drop-database \ --single-transaction \ --quick \ @@ -89,8 +102,8 @@ if [[ "$COMPRESS" -eq 1 ]]; then | gzip -6 > "$OUTPUT_FILE" else docker compose exec -T ac-database bash -lc \ - "mysqldump -uroot -p\"\$MYSQL_ROOT_PASSWORD\" \ - --all-databases \ + "mysqldump -h 127.0.0.1 -uroot -p\"\$MYSQL_ROOT_PASSWORD\" \ + --databases $databases \ --add-drop-database \ --single-transaction \ --quick \