Refine SQLite hot-backup to cleanly mirror subdirectories and remove lockfiles
This commit is contained in:
1 parent
7875ef0bc2
commit
2527045bc6
1 file changed
+15
-10
+15
-10
@@ -141,17 +141,22 @@ if [ -d "$P_DIR" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "--- Performing zero-lock hot-backup of SQLite databases on VPS ---"
|
echo "--- Performing zero-lock hot-backup of SQLite databases on VPS ---"
|
||||||
# Search in P_DIR, P_DIR/config, and $(dirname P_DIR)
|
if [ -d "$P_DIR/config" ]; then
|
||||||
for search_path in "$P_DIR" "$P_DIR/config" "$(dirname "$P_DIR")"; do
|
TARGET_BASE="{remote_stage}/pangolin/config"
|
||||||
if [ -d "$search_path" ]; then
|
SEARCH_BASE="$P_DIR/config"
|
||||||
for db in $(find "$search_path" -maxdepth 2 -name "*.db" -o -name "*.sqlite" 2>/dev/null); do
|
else
|
||||||
dbname=$(basename "$db")
|
TARGET_BASE="{remote_stage}/pangolin"
|
||||||
echo "Hot-backing up database: $dbname (source: $db)..."
|
SEARCH_BASE="$P_DIR"
|
||||||
mkdir -p "{remote_stage}/pangolin/config"
|
fi
|
||||||
sqlite3 "$db" ".backup '{remote_stage}/pangolin/config/$dbname'" 2>/dev/null || cp -v "$db" "{remote_stage}/pangolin/config/$dbname"
|
|
||||||
done
|
for db in $(find "$SEARCH_BASE" -maxdepth 4 -name "*.db" -o -name "*.sqlite" 2>/dev/null); do
|
||||||
fi
|
rel=$(realpath --relative-to="$SEARCH_BASE" "$db")
|
||||||
|
mkdir -p "$TARGET_BASE/$(dirname "$rel")"
|
||||||
|
echo "Hot-backing up SQLite database: $rel..."
|
||||||
|
sqlite3 "$db" ".backup '$TARGET_BASE/$rel'" 2>/dev/null || cp -v "$db" "$TARGET_BASE/$rel"
|
||||||
done
|
done
|
||||||
|
# Clean dangling lock/WAL files in staging archive
|
||||||
|
find "" -name "*.db-wal" -delete -o -name "*.db-shm" -delete 2>/dev/null || true
|
||||||
|
|
||||||
# Backup any named Docker volumes attached to pangolin containers
|
# Backup any named Docker volumes attached to pangolin containers
|
||||||
for vol in $(docker inspect --format '{{{{range .Mounts}}}}{{{{if eq .Type "volume"}}}}{{{{.Source}}}}{{{{"\\n"}}}}{{{{end}}}}{{{{end}}}}' $(docker ps -aq --filter "name=pangolin" 2>/dev/null) 2>/dev/null); do
|
for vol in $(docker inspect --format '{{{{range .Mounts}}}}{{{{if eq .Type "volume"}}}}{{{{.Source}}}}{{{{"\\n"}}}}{{{{end}}}}{{{{end}}}}' $(docker ps -aq --filter "name=pangolin" 2>/dev/null) 2>/dev/null); do
|
||||||
|
|||||||
Reference in new issue
Block a user