#!/bin/bash set -e # 기본 변수 GROUP="mysql" USER="mysql" TAR_FILE="/home/myapp/mariadb-10.11.13-linux-systemd-x86_64.tar.gz" INSTALL_PREFIX="/usr/local" INSTALL_DIR="$INSTALL_PREFIX/mariadb" RESET=false CLEAN_ONLY=false INSTALL=false ######################################## # 사용법 함수 usage() { cat <&2; usage;; esac done # root 권한 확인 if [ "$EUID" -ne 0 ]; then echo "[ERROR] root 권한으로 실행해야 함" >&2 exit 1 fi # -r 과 -c 충돌 확인 if [ "$RESET" = true ] && [ "$CLEAN_ONLY" = true ]; then echo "[ERROR] -r 과 -c 옵션은 함께 사용 불가" >&2 exit 1 fi # 아무 옵션도 안걸면 -h로 수행 if [ "$INSTALL" != true ] && [ "$RESET" != true ] && [ "$CLEAN_ONLY" != true ]; then usage fi # 초기화 (reset 또는 clean) if [ "$RESET" = true ] || [ "$CLEAN_ONLY" = true ]; then echo "=== MariaDB 초기화 시작 ===" systemctl stop mariadb >/dev/null 2>&1 || true systemctl disable mariadb >/dev/null 2>&1 || true rm -f /etc/systemd/system/mariadb.service systemctl daemon-reload >/dev/null 2>&1 || true rm -rf "$INSTALL_DIR" rm -f /etc/profile.d/mariadb.sh rm -rf "$INSTALL_PREFIX/mysql" echo "=== 초기화 완료: 설치 디렉터리, 서비스 파일, 환경변수, 링크 제거 ===" if [ "$CLEAN_ONLY" = true ]; then exit 0 fi fi # 설치 if [ "$INSTALL" = true ] || [ "$RESET" = true ]; then # 그룹/사용자 생성 getent group "$GROUP" >/dev/null || groupadd "$GROUP" getent passwd "$USER" >/dev/null || useradd -r -g "$GROUP" -s /bin/false "$USER" # 압축 해제 if [ ! -f "$TAR_FILE" ]; then echo "[ERROR] '$TAR_FILE' 파일을 찾을 수 없음" >&2 echo "[HOW TO FIX] TAR_FILE 경로와 이름이 정확한지 확인." exit 1 fi echo "[INFO] '$TAR_FILE' 압축 해제 중..." mkdir -p "$INSTALL_PREFIX" tar -xzf "$TAR_FILE" -C "$INSTALL_PREFIX" echo "[SUCCESS] '$INSTALL_PREFIX' 아래 디렉터리 압축 해제 완료" # 디렉터리 위치 조정 EX_DIR=$(tar -tf "$TAR_FILE" | head -1 | cut -f1 -d"/") mv "$INSTALL_PREFIX/$EX_DIR" "$INSTALL_DIR" echo "[SUCCESS] '$INSTALL_DIR'로 이동 완료" # 링크 생성 ln -sfn "$INSTALL_DIR" "$INSTALL_PREFIX/mysql" echo "[SUCCESS] '$INSTALL_PREFIX/mysql' 심볼릭 링크 '$INSTALL_DIR' 생성 완료" # 권한 설정 cd "$INSTALL_DIR" mkdir -p mysql-files data chown -R "$USER":"$GROUP" . chmod 750 mysql-files echo "[SUCCESS] mysql-files, data 디렉터리 권한 변경 완료" # 데이터베이스 초기화 if [ -x "bin/mariadb-install-db" ]; then bin/mariadb-install-db \ --user="$USER" \ --basedir="$INSTALL_DIR" \ --datadir="$INSTALL_DIR/data" echo "[SUCCESS] bin/mariadb-install-db로 데이터베이스 초기화 완료" elif [ -x "scripts/mysql_install_db" ]; then scripts/mysql_install_db \ --user="$USER" \ --basedir="$INSTALL_DIR" \ --datadir="$INSTALL_DIR/data" echo "[SUCCESS] scripts/mysql_install_db로 데이터베이스 초기화 완료" else echo "[ERROR] 초기화 스크립트를 찾을 수 없음, 수동 초기화 필요" >&2 echo "[HOW TO FIX]" echo " 1) $INSTALL_DIR/bin 또는 $INSTALL_DIR/scripts 경로 확인" echo " 2) 해당 경로에서 mysql_install_db 또는 mariadb-install-db 실행" echo " 3) 설정 완료 후 'systemctl start mariadb' 재시도" fi # 환경변수 등록 cat < /etc/profile.d/mariadb.sh export PATH=$INSTALL_DIR/bin:\$PATH EOF chmod +x /etc/profile.d/mariadb.sh echo "[SUCCESS] /etc/profile.d/mariadb.sh 생성 및 권한 변경 완료" # systemd 존재할 경우 서비스 설정 및 시작, 없으면 mysqld_safe 실행 후 크론 등록 if command -v systemctl >/dev/null 2>&1 && [ -d /run/systemd/system ]; then IS_SYSTEMD=true else IS_SYSTEMD=false fi SERVICE_SRC=$(find "$INSTALL_DIR" -type f -name mariadb.service | head -n1) if [ "$IS_SYSTEMD" = true ];then if [ -n "$SERVICE_SRC" ]; then echo "[INFO] 서비스 설정" cp "$SERVICE_SRC" /etc/systemd/system/mariadb.service sed -i "s|/usr/local/mysql|$INSTALL_DIR|g" /etc/systemd/system/mariadb.service systemctl daemon-reload systemctl enable mariadb systemctl start mariadb || true echo "[SUCCESS] 서비스 시작 완료, 상태확인: systemctl status mariadb" else echo "[ERROR] mariadb.service 파일을 찾을 수 없음" >&2 echo "[HOW TO FIX]" echo " 1) 설치 디렉터리에서 service 파일 검색: find $INSTALL_DIR -type f -name mariadb.service" echo " 2) 해당 파일을 /etc/systemd/system/ 디렉터리에 복사: sudo cp <경로> /etc/systemd/system/mariadb.service" echo " 3) systemd 다시 로드 및 서비스 활성화/시작:" echo " sudo systemctl daemon-reload" echo " sudo systemctl enable mariadb" echo " sudo systemctl start mariadb" exit 1 fi else echo "[INFO] 크론 설정" sudo -u "$USER" "$INSTALL_DIR/bin/mysqld_safe" \ --basedir="$INSTALL_DIR" \ --datadir="$INSTALL_DIR/data" > /var/log/mariadb.log 2>&1 & ( crontab -l 2>/dev/null \ | grep -v -F "$INSTALL_DIR/bin/mysqld_safe" || true echo "@reboot sudo -u $USER $INSTALL_DIR/bin/mysqld_safe --basedir=$INSTALL_DIR --datadir=$INSTALL_DIR/data >> /var/log/mariadb.log 2>&1 &" ) | crontab - echo "[SUCCESS] mysqld_safe 시작 완료, 크론 등록 완료" fi echo "=== MariaDB 설치 및 서비스 구동 완료 ===" echo "DB 접속할 계정에서 1회만 실행: source /etc/profile.d/mariadb.sh" echo "접속: mysql -u root" fi