#!/bin/bash

# grastate.dat 파일 경로 (1번 노드)
GRSTATE_FILE="/data/mysql/grastate.dat"

# 1번 노드의 safe_to_bootstrap 값을 변경하는 함수
update_safe_to_bootstrap() {
    echo "grastate.dat 파일의 safe_to_bootstrap 값을 1로 변경 중..."

    # 파일 존재 여부 확인
    if [[ ! -f "$GRSTATE_FILE" ]]; then
        echo "Error: $GRSTATE_FILE 파일을 찾을 수 없습니다."
        exit 1
    fi

    # 백업 파일 생성
    BACKUP_FILE="${GRSTATE_FILE}.bak"
    cp "$GRSTATE_FILE" "$BACKUP_FILE"
    if [[ $? -ne 0 ]]; then
        echo "Error: 백업 파일 생성에 실패했습니다."
        exit 1
    fi

    # safe_to_bootstrap: 0 -> 1 변경
    sed -i 's/safe_to_bootstrap: 0/safe_to_bootstrap: 1/' "$GRSTATE_FILE"
    if [[ $? -ne 0 ]]; then
        echo "Error: 파일 수정에 실패했습니다. 원본 파일을 복원합니다."
        mv "$BACKUP_FILE" "$GRSTATE_FILE"
        exit 1
    fi

    # 파일 권한 및 소유자 유지
    chmod --reference="$BACKUP_FILE" "$GRSTATE_FILE"
    chown --reference="$BACKUP_FILE" "$GRSTATE_FILE"

    echo "성공: safe_to_bootstrap 값을 1로 변경했습니다."
    echo "백업 파일: $BACKUP_FILE"
}

# 2번 및 3번 노드의 MySQL 서비스를 시작하는 함수
start_mysql_on_other_nodes() {
    echo "2번 노드의 MySQL 서비스 시작 중..."
    ssh -p 10022 root@192.168.10.3 "pkill -9 -ef mysql"
    ssh -p 10022 root@192.168.10.3 "pkill -9 -ef maria"
    ssh -p 10022 root@192.168.10.3 "systemctl start mysqld"
    
    if [[ $? -ne 0 ]]; then
        echo "Error: 2번 노드의 MySQL 서비스 시작에 실패했습니다."
        exit 1
    fi

    echo "3번 노드의 MySQL 서비스 시작 중..."
    ssh -p 10022 root@192.168.10.4 "pkill -9 -ef mysql"
    ssh -p 10022 root@192.168.10.4 "pkill -9 -ef maria"
    ssh -p 10022 root@192.168.10.4 "systemctl start mysqld"

    if [[ $? -ne 0 ]]; then
        echo "Error: 3번 노드의 MySQL 서비스 시작에 실패했습니다."
        exit 1
    fi
}

# 메인 실행 로직
echo "Galera 클러스터 부트스트랩 프로세스 시작..."

# 1번 노드의 safe_to_bootstrap 값 변경
update_safe_to_bootstrap

# Galera 클러스터 초기화
echo "Galera 클러스터 초기화 중..."
galera_new_cluster
if [[ $? -ne 0 ]]; then
    echo "Error: galera_new_cluster 명령 실행에 실패했습니다."
    exit 1
fi

# 2번 및 3번 노드의 MySQL 서비스 시작
start_mysql_on_other_nodes

echo "Galera 클러스터 부트스트랩 완료!"
