#!/usr/bin/env bash BACKUP_DIR=$1 if [ -z "$BACKUP_DIR" ] then echo "No backup dir" fi all_containers=$(docker ps --format "{{.ID}}:{{ .Image }}") for line in $all_containers do IFS=':' read -a container_details <<< $line container_name=${container_details[1]} container_id=${container_details[0]} case "$container_name" in "mariadb") db_name=$(docker exec $container_id bash -c 'echo $MYSQL_USER') echo Backing up mariadb $db_name docker exec $container_id bash -c 'mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --all-databases' | pv > $BACKUP_DIR/$db_name.sql ;; "postgres") db_name=$(docker exec $container_id bash -c 'echo $POSTGRES_USER') echo Backing up postgres $db_name docker exec $container_id bash -c 'PGPASSWORD=$POSTGRES_PASSWORD pg_dumpall -U $POSTGRES_USER' | pv > $BACKUP_DIR/$db_name.sql ;; "yandex/clickhouse-server") # Hardcode for plausible tables=$(docker exec $container_id clickhouse-client --query "SELECT name FROM system.tables where database == 'plausible';") for table in $tables do echo Backing up clickhouse table $table docker exec $container_id clickhouse-client --query "SELECT * FROM plausible.$table" --format CSVWithNames | pv > $BACKUP_DIR/plausible-$table.csv done ;; esac done echo "Setting user permissions..." chown -R root:root $BACKUP_DIR