[과제] MySQL 자동 설치 스크립트 작성하기

hwwwa·2023년 2월 7일
0
post-custom-banner

MySQL 자동 설치 스크립트 작성

  • 앞선 mysql 설치 과제의 절차대로 자동으로 MySQL을 설치할 수 있는 쉘 스크립트 작성
  • 스크립트를 실행하면 mysql -u root 를 입력하여 비밀번호 없이 접속할 수 있도록 작성
sh install_mysql 8.0.32
  1. MySQL 설치 버전: 8.0.32
    2. 설치 버전을 변수로 받기
  • 참고) NHN Cloud에서 인스턴스 생성 시 사용자 스크립트 기능을 사용하여 작성한 스크립트 테스트 가능
    • https://docs.nhncloud.com/ko/Compute/Instance/ko/console-guide/#\_11
    • 인스턴스 생성 후 실행할 스크립트를 지정 가능
    • 인스턴스의 첫 번째 부팅이 완료된 후 네트워크 설정 등 초기화 과정이 끝나고 난 뒤에 스크립트가 실행됨
    • 공식 이미지에 내장된 cloud-init (Linux)과 같은 자동화 도구에 의해서 실행됨
    • root 사용자 권한으로 실행됨
    • 사용자 스크립트의 첫 번째 줄은 반드시 #!으로 시작해야 함
    • 스크립트에서 표준 출력/에러 장치로 출력한 로그는 /var/log/cloud-init-output.log에서 확인 가능

개발 환경

  • NHN Cloud
  • CentOS 7.9
  • MySQL 8.0.32
  • Redis 7.0.8

MySQL 자동 설치 스크립트 작성

  • bash 지정 및 필요한 라이브러리 설치
#!/usr/bin/env bash


# 압축파일 다운로드를 위해 wget 설치
sudo yum -y install wget

# libaio library 설치 (mysql dependency)
sudo yum -y install libaio
  • 버전 입력 여부 확인
# command line argument의 수가 1이 아닌 경우 종료
if [ $# -ne 1 ]
then
    echo "Usage: sh $0 version"
    exit 1
fi
  • 압축파일 다운로드 및 오류 확인
    • 잘못 입력한 경우 wget 실행 시 오류가 발생하므로 오류 여부 체크
# command line argument로 입력받은 다운로드할 mysql의 버전
version=$1

# 다운로드할 mysql 파일 이름(CentOS 7, x86 64bit)
filename=mysql-$version-linux-glibc2.12-x86_64

# 압축파일을 다운로드 할 경로 지정
cd /home/centos

# 지정한 버전의 mysql 압축 파일을 다운로드하고 로그 저장
wget -a wget-log https://dev.mysql.com/get/Downloads/MySQL-${version%.*}/$filename.tar.xz

# 다운로드가 정상적으로 수행되었는지 확인
error=`tail -3 wget-log | grep ERROR`
rm wget-log

# 오류 발생 시 오류 메세지를 출력하고 종료
if [ -n "${error}" ]; then
    echo "${error}"
    exit 1
fi
  • mysql 설치
# 압축 풀기
tar xvf $filename.tar.xz

# 압축 파일 제거
rm $filename.tar.xz

# 심볼릭 링크 지정
ln -s $filename mysql
  • 로그 및 config 파일 설정
# 로그 디렉토리 생성, 권한 설정
mkdir mysql/mysql-log
chown centos:centos mysql/mysql-log
chmod 750 mysql/mysql-log

# 로그 파일 생성, 권한 설정
touch mysql/mysql-log/mysqldb.log
chown centos:centos mysql/mysql-log/mysqldb.log

# config 설정 >> my.cnf에 저장
echo '[client]
port=3306

[mysqld]
basedir=/home/centos/mysql
datadir=/home/centos/mysql/data
user=centos

[mysqld_safe]
log-error=/home/centos/mysql/mysql-log/mysqldb.log
pid-file=/home/centos/mysql/mysql-log/mysqldb.pid' >> mysql/my.cnf

# PATH 설정
sudo sed -i '$aPATH="$PATH:/home/centos/mysql/bin"' /etc/profile
source /etc/profile
  • mysql 실행
# mysql 초기화 설정(비밀번호가 없도록 설정)
mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf --initialize-insecure --user=centos

# mysql 서버 실행
mysql/bin/mysqld_safe --defaults-file=/home/centos/mysql/my.cnf --user=centos &

# 연결 기다리기
sleep 3

# mysql 실행
mysql -u root

결과

  • 인스턴스에서 직접 스크립트를 실행한 경우

    ...

  • NHN Cloud 사용자 스크립트를 사용한 경우


피드백 및 추가구현 고려사항 정리

  • 충돌 방지를 위해 설치 전에 이전에 설치된 DB를 지운 후에 설치하도록 수정하면 좋을 것 같다.
  • 실수로 이미 설치되어 운영중인 인스턴스에 또 설치해버리면 이전의 DB에 장애 발생
    • 이미 설치되어있는 경우 정말 재설치할건지 다시 한번 확인해주는 로직을 추가하면 좋다.
  • 설치 시에 해당 인스턴스의 OS 정보 등을 확인하여 분기 처리를 통해 다르게 설치 작업을 수행하도록 구현하면 좋을 것 같다.
  • 파라미터를 입력하지 않는다면 최신 버전을 설치하도록하는 기능을 추가하는 것도 좋을 것 같다.
  • wget에서 spider 옵션을 사용하면 다운로드를 시도하지 않고 링크가 잘못되었는지 확인 가능하다.
  • mysql에서 mysqld_safe --skip-grant-tables 는 비밀번호 테이블을 아예 사용하지 않는다는 옵션이므로 보안에 매우 위험하다. 사용하지 않도록 한다.
post-custom-banner

0개의 댓글