MySQL실행 시 루트 계정에 비밀번호 없이 접근 할 수 있는 initialize option이다.
MySQL실행 시 모든 Client들이 인증 과정 없이 MySQL서버에 접근할 수 있다.
skip-grant-table는 모든 Client들이 인증 과정 없이 MySQL서버에 접근할 수 있도록 하는 파라미터이기 때문에 보안적 위험이 커 MySQL 공식 문서에서는 사용을 지양하고 있다.
따라서 현재 skip-grant-tables를 이용해 설치하는 방식을 initialize-insecure방식으로 수정할 필요가 있다.
echo `${user_path}/mysql/bin/mysqld --defaults-file=${user_path}/mysql/my.cnf --initialize-insecure`
kill -9 [PID]
를 사용하여 현재 실행되있는 mysqld를 종료하고 재설치를 수행한다.# 실행중인 mysqld PID 및 mysql port 있는지 확인하고 kill하는 로직
mysql_process_number=`ps | grep mysqld | cut -d "p" -f1 | tr -d " "`
if [ -z ${mysql_process_number} ]; then
echo "실행중인 mysql 서버가 없습니다."
else
echo "실행중인 mysql 서버를 발견하여 종료합니다."
echo `kill -9 ${mysql_process_number}`
fi
mysql_install_port_number=`cat ${user_path}/mysql/my.cnf | grep port | cut -d "=" -f2`
mysql_port_open_count=`netstat -ano | grep ${mysql_install_port_number} | wc -l`
if [ ${mysql_port_open_count} -ge 1 ]; then
echo "현재 mysql이 설치 된 port를 닫습니다."
echo `fuser -k ${mysql_install_port_number}/tcp`
sleep 1
fi
현재 로직에서는 mysql이라는 단어를 .bashrc에서 검색하는 방식이기 때문에 조금 더 구체적인 조건을 주면 안정성이 올라간다.
if [ ${mysql_env_count} -gt 0 ]; then
echo "이미 bashrc 환경변수가 지정되었습니다."
else
echo `echo "export PATH="\\$"PATH:"${user_path}"/mysql/bin/" >> ${user_path}/.bashrc`
fi
# mysql 포트 인자를 입력했는지 확인 및 포트 연결 확인
if [ -z ${port_number} ]; then
port_number="3306"
echo "포트 정보를 입력하지 않았음으로 default 포트번호 3306으로 설치를 진행합니다."
fi
install_port_check=`nc -z localhost ${port_number} &>/dev/null && echo ${?}`
if [ -z ${install_port_check} ] || [ ${install_port_check} -ne 0 ]; then
echo "사용가능한 포트입니다. ${port_number}포트로 설치를 진행합니다."
else
echo "이미 사용중인 포트입니다. 다른포트를 입력해서 설치 해주세요. 프로그램을 종료합니다."
exit 2
fi
> /dev/null
: /dev/null에 데이터를 리다이렉션 하면 데이터를 출력하지 않는다.mysql_count=`find ${user_path}/mysql* | wc -l`
if [ ${mysql_count} -ge 1 ]; then
# mysql 삭제 여부 확인
read -p "설치된 MySQL을 삭제하시겠습니까?(y, n) : " delete_flag
if [ ${delete_flag} == "y" ]; then
echo `rm -rf ${user_path}/mysql*`
echo "mysql binary install을 삭제했습니다."
else
echo "mysql을 삭제하지 않고 프로그램을 종료합니다."
exit 3
fi
fi
# mysql 버전 인자를 입력했는지 확인 및 링크 정보 확인
if [ -z ${mysql_version} ]; then
mysql_version="8.0.32"
echo "버전 정보를 입력하지 않았음으로 최신 버전으로 설치를 진행합니다."
fi
# mysql 포트 인자를 입력했는지 확인 및 포트 연결 확인
if [ -z ${port_number} ]; then
port_number="3306"
echo "포트 정보를 입력하지 않았음으로 default 포트번호 3306으로 설치를 진행합니다."
fi
#!/usr/bin/env bash
mysql_version=${1}
port_number=${2}
user_path="/home/centos"
# psmic library 설치(특정 port Close)
echo `sudo yum -y install psmisc`
# 실행중인 mysqld PID 및 mysql port 있는지 확인하고 kill하는 로직
mysql_process_number=`ps | grep mysqld | cut -d "p" -f1 | tr -d " "`
if [ -z ${mysql_process_number} ]; then
echo "실행중인 mysql 서버가 없습니다."
else
echo "실행중인 mysql 서버를 발견하여 종료합니다."
echo `kill -9 ${mysql_process_number}`
fi
mysql_install_port_number=`cat ${user_path}/mysql/my.cnf | grep port | cut -d "=" -f2`
mysql_port_open_count=`netstat -ano | grep ${mysql_install_port_number} | wc -l`
if [ ${mysql_port_open_count} -ge 1 ]; then
echo "현재 mysql이 설치 된 port를 닫습니다."
echo `fuser -k ${mysql_install_port_number}/tcp`
sleep 1
fi
# mysql 버전 인자를 입력했는지 확인 및 링크 정보 확인
if [ -z ${mysql_version} ]; then
mysql_version="8.0.32"
echo "버전 정보를 입력하지 않았음으로 최신 버전으로 설치를 진행합니다."
fi
mysql_folderName="mysql-${mysql_version}-el7-x86_64"
if [ ${mysql_version} != "8.0.32" ]; then
mysql_connection=`wget --timeout=1 --tries=1 --spider https://downloads.mysql.com/archives/get/p/23/file/${mysql_folderName}.tar.gz 2>&1 | grep 'broken link' | wc -l`
if [ ${mysql_connection} -ge 1 ]; then
echo "잘못된 링크입니다. 프로그램을 종료합니다."
exit 1
fi
fi
# mysql 포트 인자를 입력했는지 확인 및 포트 연결 확인
if [ -z ${port_number} ]; then
port_number="3306"
echo "포트 정보를 입력하지 않았음으로 default 포트번호 3306으로 설치를 진행합니다."
fi
install_port_check=`nc -z localhost ${port_number} &>/dev/null && echo ${?}`
if [ -z ${install_port_check} ] || [ ${install_port_check} -ne 0 ]; then
echo "사용가능한 포트입니다. ${port_number}포트로 설치를 진행합니다."
else
echo "이미 사용중인 포트입니다. 다른포트를 입력해서 설치 해주세요. 프로그램을 종료합니다."
exit 2
fi
# mysql 바이너리 설치 확인 및 삭제 로직
mysql_count=`find ${user_path}/mysql* | wc -l`
if [ ${mysql_count} -ge 1 ]; then
# mysql 삭제 여부 확인
read -p "설치된 MySQL을 삭제하시겠습니까?(y, n) : " delete_flag
if [ ${delete_flag} == "y" ]; then
echo `rm -rf ${user_path}/mysql*`
echo "mysql binary install을 삭제했습니다."
else
echo "mysql을 삭제하지 않고 프로그램을 종료합니다."
exit 3
fi
fi
# MySQL 설치 로직
if [ ${mysql_version} == "8.0.32" ]; then
# mysql 바이너리 최신버전 설치 로직
echo `wget https://dev.mysql.com/get/Downloads/MySQL-8.0/${mysql_folderName}.tar.gz`
else
# mysql 바이너리 구 버전 설치 로직 (아카이브에서 가져옴)
echo `wget https://downloads.mysql.com/archives/get/p/23/file/${mysql_folderName}.tar.gz`
fi
# mysql 압축해제 및 권한 변경
echo `mv ${mysql_folderName}.tar.gz ${user_path}`
echo `tar -xvf ${user_path}/${mysql_folderName}.tar.gz -C ${user_path}`
echo `sudo yum install -y libaio`
echo `ln -s ${user_path}/${mysql_folderName} ${user_path}/mysql`
# my.cnf parameter 설정
mycnf_parameter=$(cat << EOF
[client]
socket=${user_path}/mysql/mysql.sock
[mysqld]
port=${port_number}
user=centos
socket=${user_path}/mysql/mysql.sock
basedir=${user_path}/mysql
datadir=${user_path}/mysql/data
pid-file=${user_path}/mysql/mysqld.pid
log-error=${user_path}/mysql/mysql-logs/mysqld.log
EOF
)
echo `echo "${mycnf_parameter}" >> ${user_path}/mysql/my.cnf`
echo `mkdir ${user_path}/mysql/data`
echo `mkdir ${user_path}/mysql/mysql-logs`
echo `touch ${user_path}/mysql/mysql-logs/mysqld.log`
echo `ln -s ${user_path}/mysql/mysql.sock /tmp/mysql.sock`
#권한 변경
echo `sudo chown -R centos:centos ${user_path}/${mysql_folderName}`
echo `sudo chown -h centos:centos ${user_path}/mysql`
mysql_env_count=`cat ${user_path}/.bashrc | grep 'mysql' | wc -l`
if [ ${mysql_env_count} -gt 0 ]; then
echo "이미 bashrc 환경변수가 지정되었습니다."
else
echo `echo "export PATH="\\$"PATH:"${user_path}"/mysql/bin/" >> ${user_path}/.bashrc`
fi
echo `${user_path}/mysql/bin/mysqld --defaults-file=${user_path}/mysql/my.cnf --initialize-insecure`
echo `${user_path}/mysql/bin/mysqld --defaults-file=${user_path}/mysql/my.cnf &`