Existing borg-backup.sh/dump_db.sh, old/ reference scripts, and the brainstormed design spec for restore tooling + runbook.
37 lines
1.3 KiB
Bash
37 lines
1.3 KiB
Bash
root@chaudron:/home/srv/files/content/mariadb# cat dump_db.sh
|
|
#!/bin/bash
|
|
|
|
# Load configuration from environment variables
|
|
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-MySuperDatabase}
|
|
DUMP_DIR=${DUMP_DIR:-dump}
|
|
DOCKER_CONTAINER_NAME=${DOCKER_CONTAINER_NAME:-mariadb}
|
|
|
|
# Check dependencies
|
|
if ! command -v docker &>/dev/null; then
|
|
echo "Docker is not installed or not in the PATH"
|
|
exit 1
|
|
fi
|
|
|
|
if ! docker ps -q -f name=$DOCKER_CONTAINER_NAME; then
|
|
echo "Docker container '$DOCKER_CONTAINER_NAME' is not running"
|
|
exit 1
|
|
fi
|
|
|
|
# Create dump directory if it doesn't exist
|
|
mkdir -p "$(dirname "$0")/$DUMP_DIR"
|
|
|
|
# Delete old dump files
|
|
rm -f "$(dirname "$0")/$DUMP_DIR"/*.sql
|
|
|
|
# Get list of databases and exclude system databases
|
|
databases=$(docker exec -it $DOCKER_CONTAINER_NAME mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "SHOW DATABASES;" --skip-column-names -s | grep -Ev "(information_schema|mysql|performance_schema|sys)" | tr -d '\r')
|
|
|
|
# Iterate through databases and dump them individually
|
|
for db in $databases; do
|
|
echo "Dumping database: $db"
|
|
docker exec -i $DOCKER_CONTAINER_NAME mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" "$db" >"$(dirname "$0")/$DUMP_DIR/$db.sql"
|
|
echo "Dumped database: $db"
|
|
done
|
|
|
|
echo "All non-system databases dumped to individual files in '$DUMP_DIR' directory."
|