Files
docker-services/scripts/backup-db.sh

30 lines
1.0 KiB
Bash
Executable File

#!/bin/bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
COMPOSE_DIR="$SCRIPT_DIR"/../
# Get all service databases, dump databases, & copy database to compose path
databases=$(docker compose -f ${COMPOSE_DIR}/compose.yml ps | grep '\-db' | awk '{print $1}' | tr '\n' ' ')
for db in $databases; do
db_env_path=${COMPOSE_DIR}/env/${db}.env
if [ ! -f $db_env_path ]; then
echo "Could not find the environment file for database '$db'"
continue
fi
db_service=${db/\-db/}
db_passwd=$(cat $db_env_path | grep MYSQL_ROOT_PASSWORD | tr '=' ' ' | awk '{print $NF}' | tr -d '"')
db_dmp_cmd="mysqldump --password=${db_passwd} ${db_service} > /root/${db_service}.sql"
echo -e "\nDumping database '${db}'"
docker exec ${db} sh -c "$db_dmp_cmd" &> /dev/null
echo "Copying database dump '${db_service}.sql' to '${COMPOSE_DIR}/sql/${db_service}.sql'"
docker cp ${db}:/root/${db_service}.sql ${COMPOSE_DIR}/sql/${db_service}.sql &> /dev/null
chown -R root:root ${COMPOSE_DIR}/sql
done
echo -e "\nDumping complete!"