스크립트를 통해 MySQL,Redis 자동 설치를 진행합니다.
1) 반복 작업에 대한 자동화가 가능
스케줄 설정과 같이 주기적으로 수행하는 단순한 작업에 쉘 스크립트를 활용하면 관리자가 일일이 타이핑하지 않아도 된다.
2) 기존의 명령어를 사용자만의 명령어로 보안
쉘 스크립트를 이용하여 기존의 명령어의 결과를 원하는 형태의 결과로 표시할 수 있으며, 이를 위해 입출력 재지정(redirection)을 활용하면 된다.
3) 손쉽고 빠른 개발 및 보완이 가능
운영체제의 명령어들을 잘 알고 있다면 손쉽고 빠른 개발 및 보완이 가능하다.
직접 MySQL, Redis 자동설치 쉘 스크립트를 작성해보면서 설치를 진행합니다.
# 파일 생성
touch install_mysql.sh
# 실행파일로 변경
chmod +x install_mysql.sh
본격적으로 shell script를 작성하기 이전에,,변수명으로 mysql version 받아서 출력해주는 것 예제를 통해 연습
1️⃣ 예제 1
# get user input(version) echo "What version do you want to install?" read version echo "your version is : ${version}"
2️⃣ 예제 2
# get user input(version) echo "What version do you want to install?" read version # echo "your version is : ${version}" case $version in "8") VERSION=8;; "5") VERSION=5;; "3") VERSION=3;; *) echo "error";; esac echo "${VERSION}"2️⃣ 예제 3
# get user input(version) sh install_mysql.sh 8.0.27 echo "$1" 8.0.27
mysql 설치 쉘 스크립트 작성
#!/bin/bash
# get user input(version)
echo "What version do you want to install?"
read version
case $version in
"8.0.27") VERSION=8
IN_VERSION=https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm;;
"5") VERSION=5;;
"3") VERSION=3;;
*) echo "error";;
esac
echo "installing mysql-$VERSION"
echo "==================================="
# for division
echo "===================================" >> result.txt 2> /dev/null
# >> result.txt 2> /dev/null
# touch result text
touch result.txt
# wget download
sudo yum -y install wget
# remove default mariadb
sudo yum -y erase mariadb*
# install rpm
sudo yum -y install $IN_VERSION
# install server
sudo yum -y install mysql-community-server
# start server
sudo systemctl start mysqld 2> /dev/null
# check server
sudo systemctl status mysqld 2> /dev/null
# find rootpass
ROOTPASS="`sudo grep 'temporary password' /var/log/mysqld.log | sed 's/.*root@localhost: //'`"
# start with rootpass
mysql -u root --password="$ROOTPASS"
yum 의 -y 옵션 :
-y, --assumeyes answer yes for all questions
따라서 y/n 여부를 묻지 않고 install 할 시 옵션을 꼭 붙여줍시다!
shell script 작성 시 날 수 있는 오류
Bad substitution 이라는 오류 ➡️ 본인은 끝날 구문이 없는
fi를 써주어서 오류가 남

# >> result.txt 2> /dev/null
LOG="`>> result.txt 2> /dev/null`"
# 명령어 뒤에 $LOG 붙여주면 완료
>> 명령어 사용해서 로그를 redirection, NHN CLOUD 에서서는 /var/log/cloud-init-output 에서 로그를 저장합니다.
# 파일 생성
touch install_mysql.sh
# 실행파일로 변경
chmod +x install_mysql.sh
# start => sh mysql.sh 8.0.27
#!/bin/bash
# wget download
sudo yum -y install wget
# libaio download
sudo yum -y install libaio
# remove default mariadb
sudo yum -y erase mariadb*
# user input, version
version=$1
# change to home/centos
# NHN CLOUD는 기본적으로 루트(/) 밑에 설치해니까 (/home/centos)로 경로 이동
cd /home/centos
# zip file download
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-$version-linux-glibc2.12-x86_64.tar.xz
# upzip file
tar -xvf mysql-$version-linux-glibc2.12-x86_64.tar.xz
# name change
mv mysql-$version-linux-glibc2.12-x86_64/ mysql
# go mysql
cd mysql
# my.cnf
touch my.cnf
# vi my.cnf
echo "[client]
port=3306
socket=/home/centos/mysql/mysql.sock
[mysqld]
socket=/home/centos/mysql/mysql.sock
basedir=/home/centos/mysql
datadir=/home/centos/mysql/data
user=centos
key_buffer_size=64M
max_allowed_packet=32M
#query_cache_size=32M
max_connections=2625
max_connect_errors=2000000
wait_timeout=60
explicit_defaults_for_timestamp = 1
pid-file=/home/centos/mysql/mysqld.pid
log-error=/home/centos/mysql/logs/mysqld.log
bulk_insert_buffer_size=0" > my.cnf
# make data,logs directory
mkdir data
mkdir logs
# chown
sudo chown -R centos:centos /home/centos/mysql
# initialize
/home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf --initialize
# mysql root
/home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf &
# 오류 발생 이후 넣어준 명령어
# sleep
sleep 3
# rootpass
ROOTPASS="`sudo grep 'temporary password' /home/centos/mysql/logs/mysqld.log | sed 's/.*root@localhost: //'`"
# mysql start
/home/centos/mysql/bin/mysql -uroot -p$ROOTPASS -S /home/centos/mysql/mysql.sock
❗️오류발생!
/home/centos/mysql/bin/mysql -uroot -p'비밀번호' -S /home/centos/mysql/mysql.sock명령어와 관련해서 mysql 접속 오류가 납니다.
터미널에서 입력해서 실행하면 정상동작하는데 어째서일까?
위의 내용들을 주석처리하고 스크립트를 통해 임시비밀번호로 접속해도(마지막 2줄만 실행) 정상동작한다. 실행하고 연결까지의 시간이 필요한가 싶어서sleep명령어를 통해 잠시동안 멈춰주고 실행했더니 잘 접속되었습니다.

예약 스크립트에 아래의 스크립트(최종 코드)를 추가
#!/bin/bash # wget download sudo yum -y install wget # libaio download sudo yum -y install libaio # remove default mariadb sudo yum -y erase mariadb* # change to home/centos cd /home/centos # zip file download wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz # upzip file tar -xvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz # name change mv mysql-8.0.27-linux-glibc2.12-x86_64/ mysql # chown sudo chown -R centos:centos ./mysql # go mysql cd mysql # my.cnf touch my.cnf # vi my.cnf echo "[client] port=3306 socket=/home/centos/mysql/mysql.sock [mysqld] socket=/home/centos/mysql/mysql.sock basedir=/home/centos/mysql datadir=/home/centos/mysql/data user=centos key_buffer_size=64M max_allowed_packet=32M #query_cache_size=32M max_connections=2625 max_connect_errors=2000000 wait_timeout=60 explicit_defaults_for_timestamp = 1 pid-file=/home/centos/mysql/mysqld.pid log-error=/home/centos/mysql/logs/mysqld.log bulk_insert_buffer_size=0" > my.cnf # make data,logs directory mkdir data mkdir logs # chown sudo chown -R centos:centos /home/centos/mysql # initialize /home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf --initialize # mysql root /home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf &
❗️ 작성한 스크립트를 예약 스크립트에 넣고 인스턴스를 생성하게 되면 오류발생!

my.cnf 설정을 변경하기 이전에 권한을 주어서 제대로 적용이 되지 않아 나는 오류였습니다.
# my.cnf 설정
...
# chown
# my.cnf로 mysql 설정을 변경하고 권한을 주어야 함!
sudo chown -R centos:centos /home/centos/mysql
따라서 위와 같이 스크립트를 수정하고 재실행 > 초기 비밀번호입력하면 > 접속 완료!

touch install_radis.sh
chmod +x install_radis.sh
#!/bin/bash
# get user input(version)
echo $1
# wget download
sudo yum -y install wget
# epel download
sudo yum -y install epel-release
# remi download
sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# redis install
sudo yum -y install redis
# redis start
sudo systemctl start redis
# redis enable
sudo systemctl enable redis
# redis cli
redis-cli
sh install_redis.sh 6.2.6 으로 시작!

touch install_radis.sh
chmod +x install_radis.sh
#!/bin/bash
# get user input(version)
echo $1
# wget download
sudo yum -y install wget
# gcc download
sudo yum -y install gcc
# download file
wget https://download.redis.io/releases/redis-$1.tar.gz
# unzip file
tar xzf redis-$1.tar.gz
# cd redis file
cd redis-$1
# make comfile
make
# start redis-server (daemon)
# edit redis.conf
sed -i 's/daemonize no/daemonize yes/g' redis.conf
src/redis-server ./redis.conf
# start redis-cli
src/redis-cli
sh install_redis.sh 6.2.6 으로 시작!

src/redis-cli 는 사용자가 입력/var/log/cloud-init-output.log 에서 확인 가능 => 새로운 창을 켜서 tail -f /var/log/cloud-init-output.log 를 통해 잘 설치되고 있는지 확인해보세요!

yum으로 설치돼있는 패키지 확인 명령어
yum list installed | grep mysql
sed 명령어 종류
$> touch test.sh
$> chmod +x test.sh -> 내용 : sed -i 's/abcd/efgh/g'
$> a.txt
$> touch a.txt -> 내용 : abcd
$> cat a.txt
efgh
sed -i 's/기존 내용/변경할 내용/g' 파일명.txt
ROOTPASS="`sudo grep 'temporary password' /var/log/mysqld.log | sed 's/.*root@localhost: //'`"
참고링크
스크립트 최종본 링크 : https://velog.io/@claraqn/%EA%B3%BC%EC%A0%9C-MySQL-Redis-%EC%9E%90%EB%8F%99%EC%84%A4%EC%B9%98-%EC%B5%9C%EC%A2%85-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8