#!/bin/bash set -e set -o pipefail # SUDO helper: empty if root SUDO="" if [ "$(id -u)" != "0" ]; then SUDO="sudo"; fi # Get the directory where this script is located SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" export WORKSPACE="${REPO_ROOT}" # Default INFRA_ID if not provided export INFRA_ID="${INFRA_ID:-dev-$USER}" NUM_NODES=${PROXYSQL_CLUSTER_NODES:-9} if [[ "${SKIP_CLUSTER_START}" == "1" ]] || [[ "${SKIP_CLUSTER_START}" == "true" ]] || [[ "${NUM_NODES}" == "0" ]]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] >>> Cluster init SKIPPED (SKIP_CLUSTER_START=${SKIP_CLUSTER_START}, Nodes=${NUM_NODES})" exit 0 fi IS_HOST=false if command -v docker &> /dev/null; then IS_HOST=true; fi echo "[$(date '+%Y-%m-%d %H:%M:%S')] >>> Cluster check/init ..." # Helper to run SQL run_sql() { local node_name=$1 shift if [ "$IS_HOST" = true ]; then local container="${node_name}.${INFRA_ID}" # We use mysql -h127.0.0.1 inside the container to avoid socket issues docker exec -i "${container}" mysql -uadmin -padmin -h127.0.0.1 -P6032 "$@" else # From host to containers, we should use radmin mysql -uradmin -pradmin -h "${node_name}" -P 6032 "$@" fi } # Check if already initialized if run_sql "proxysql" -e "SELECT hostname FROM proxysql_servers" 2>/dev/null | grep -q "proxy-node1"; then echo ">>> Cluster already initialized. Skipping." exit 0 fi if [ "$IS_HOST" = false ]; then echo ">>> No Docker detected. Assuming coordinator will handle initialization. Skipping." exit 0 fi echo ">>> Initializing Cluster Topology from Host..." # 1. Configure the Primary node run_sql "proxysql" <>> Configuring Node: ${NODE}" run_sql "${NODE}" <>> Cluster initialization COMPLETE."