[Ubuntu] 쉘 스크립트 MySQL 설치 자동화

버버니야·2022년 2월 24일
0

Ubuntu에서 MySQL 설치 자동화 스크립트

Ubuntu MySQL <- 해당 블로그를 참고해 진행

apt-get을 이용한 설치

  1. 이미 설치되어 있는 MySQL 삭제하고 진행
sudo apt-get remove --purge mysql* -y
sudo apt-get autoremove -y
sudo apt-get autoclean
  1. MySQL 설치
sudo apt-get update
sudo apt-get install mysql-server -y
  1. 외부 접속 기능 설정 (3306포트 오픈)
sudo ufw allow mysql
  1. MySQL 실행
sudo systemctl start mysql
  1. Ubuntu 재시작시 MySQL 자동 재시작
sudo systemctl enable mysql
  1. MySQL 접속
sudo /usr/bin/mysql -u root -p

위 모든 과정을 쉘 스크립트로 작성

#!/bash/bash


# mysql uninstall
sudo apt-get remove --purge mysql* -y
sudo apt-get autoremove -y
sudo apt-get autoclean
echo "Uninstalling Done"

# mysql install
sudo apt-get update
sudo apt-get install mysql-server -y
sudo ufw allow mysql
echo "Installing Done"
# mysql auto start setting
sudo systemctl start mysql
sudo systemctl enable mysql

# mysql version checking
mysql --version

삭제 -> 설치 -> 버전 확인까지 완료.

apt-get 이 아닌 압축파일 다운 후 실행하는 쉘 스크립트

tar 파일 다운로드

cd /usr/local
sudo wget dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22.tar.gz

tar 파일 압축 해제

 sudo tar xvfz mysql-8.0.22.tar.gz


디렉토리에 mysql-8.0.22 디렉토리가 생성됐다.

mysql 설치하기

cd mysql-8.0.22
sudo rm -f cMakeCache.txt
sudo mkdir dir_mysql
cd dir_mysql

그 다음 cmake를 하는 과정에서 오류 발생

cmake DCMAKE_INSTALL_PREFIX=/usr/local/mysqlDMYSQL_DATADIR=/usr/local/mysql/data DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock DMYSQL_TCP_PORT=3306 DDEFAULT_CHARSET=utf8 DDEFAULT_COLLATION=utf8_general_ci DSYSCONFDIR=/etc DWITH_EXTRA_CHARSETS=all DWITH_INNOBASE_STORAGE_ENGINE=1 DWITH_ARCHIVE_STORAGE_ENGINE=1 DWITH_BLACKHOLE_STORAGE_ENGINE=1 DDOWNLOAD_BOOST=1 DWITH_BOOST=/usr/local/mysql/boost
CMake Error: The source directory "/usr/local/mysql-8.0.22/DWITH_BOOST=/usr/local/mysql/boost" does not exist.

usr/local/mysql에 boost가 없는 것 같다.
boost를 찾아 경로를 변경하는 방법을 시도

디렉토리를 뒤적이던중 /usr/local/mysql-8.0.22/include에서 boost를 발견
하지만 에러가 해결되지 않았다.

local에 boost 라이브러리를 참조해야하는데 없는 것 같다.

sudo apt upgrade libboost-all-dev

boost 라이브러리가 이미 존재하는 것 같아 일단 업데이트 부터 진행

해도 되지 않아 수동으로 boost 설치해보기

cd /usr/local
sudo wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

sudo tar xvfz boost_1_59_0.tar.gz

이후 다시 설치 시도

sudo cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-DMSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UINX_ADDR=/usr/local/mysql/mysql.sock-DMYSQL_TCP_PORT=3306 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DSYSCONFDIR=/etc -DWITH_EXTRA_CHARSETS=all -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src/boost_1_59_0

이전보다 진행이 더 되었지만 다른 에러가 발생했다ㅠ

찾아보니 소스 디렉토리에서 빌드를 하지말라는 뜻인 것 같아

참고블로그 처럼 압축해제한 곳 안에 다른 디렉토리를 생성해서 실행

mkdir dir_mysql
cd dir_mysql
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-DMSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UINX_ADDR=/usr/local/mysql/mysql.sock-DMYSQL_TCP_PORT=3306 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DSYSCONFDIR=/etc -DWITH_EXTRA_CHARSETS=all -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src/boost_1_59_0

하지만 이렇게해도 설치가 되지 않아

-DFORCE_INSOURCE_BUILD=1

강제로 소스 안에서 빌드하는 옵션을 찾아 적용

했으나..또 boost가 없다는 오류

다시 부스트 경로를 수정해 봐야할 것 같다.

경로를 수정해도 똑같은 결과가 나와 boost를 최신 버전으로 업데이트해본다.

sudo wget https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/boost_1_73_0.tar.gz
tar xvf boost_1_73_0.tar.gz

이제 다시 컴파일 시도 cmake (경로 1_59_0 -> 1_73_0 으로 변경)

sudo cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-DMSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UINX_ADDR=/usr/local/mysql/mysql.sock-DMYSQL_TCP_PORT=3306 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DSYSCONFDIR=/etc -DWITH_EXTRA_CHARSETS=all -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src/boost_1_73_0 -DFORCE_INSOURCE_BUILD=1

이전보다 더 많이 진행이 되었지만 또 다른 오류가 발생...

CMakeCache.txt 파일 강제 삭제 후 다시 시도

같은 에러 발생

sudo apt-get install libncurses5-dev libncursesw5-dev

ncurses 라이브러리 설치
에러 해결 및 다른 에러 발생..

Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)

해결을 위해 pkg-config 설치

sudo apt-get install pkg-config

오.. 몇시간 만에 드디어 성공했다.

디렉토리안에 여러 파일이 생성된 모습
이제 진짜 컴파일 할 차례

sudo make

컴파일이 아주 느리지만 되어가는 중이다.

는 30분넘게 실행되다.

fatal error 발생...

구글링을 해보니 이런 경우 메모리 부족인 경우가 많다해서
혹시 열어둔 약 20개의 사파리 탭 때문인가해서 일단 종료후 다시 sudo make

하지만 다시해도 같은 오류가 발생해
Swap 프로세스를 종료하고
Swap을 리사이즈 해보는 방식을 해봐야겠다.

참고 블로그

sudo swapoff -a
sudo dd if=/dev/zero of=/swapfile bs=1M count=2000
sudo mkswap /swapfile
grep SwapTotal /proc/meminfo
sudo make
  1. swap 프로세스들 종료
  2. swap resize
  3. 사용 가능한 파일들 swap으로 만들기
  4. 해당 swap파일 활성화

약 두간에 걸쳐 드디어 컴파일이 완료됐다.
이제 install을 할 차례

make install

bin/mysqld: File './mysql-bin.index' not found (Errcode: 13)
220225  4:57:31 [ERROR] Aborting

해당 에러 발생 권한부여가 검색해보니 권한부여 문제라해서

sudo chown -R mysql:mysql /usr/local/mysql/bin

로 mysql 디렉토리 접근 권한 부여


다른 에러 발생...

Installing MySQL on Unix/Linux <- MySQL 공식 홈페이지를 통해 얻은 정보로 한단계씩 해보기

bin/mysqld --initialize --user=mysql

에러가 발생하지 않았다.
임시 비밀번호까지 확인.
kJFQe,gq3u&

bin/mysql -u root -p

으로 MySQL 실행, 비밀번호 입력까지
했으나..

MySQL 실행이 되다가 Segmentation fault가 떠버린다

아래는 원래 mysql이 정상적으로 실행되었을 때 화면. (MacOS 실행)

원래는 Type 'help' or 'h' for help₩~~~ 가 나와야할 타이밍에
Segmentation fault가 뜬다.

그러다 이상한 점 발견.
분명히 설치한 버젼은 8.0.22버젼인데
터미널 창에서 보이는 버전은 5.5.62 버전이라고 나오고 있다.
처음 시도했던 버전이었는데 여기서 뭔가 꼬인 것 같기도하다..

완전 삭제를 다시 진행 후 재설치

위 과정을 다시 실행

cmake \
.. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DSYSCONFDIR=/etc \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/src/boost_1_73_0 -DFORCE_INSOURCE_BUILD=1

이 부분에서 오타가 있었음을 발견했다.
DCMAKE_INSTALL_PREFIX 부분의 오타때문에 /usr/local/mysql 이 아닌 다른 디렉토리가 생성되어 진행에 어려움이 있었던 것이다.

$ groupadd mysql
$ useradd -r -g mysql -s /bin/false mysql

그룹과 유저를 생성

-g : 그룹 지정 옵션
-s : user의 로그인 shesll

다음으로 mysql 디렉토리안에 디렉토리 생성 및 권한 부여

$ cd /usr/local/mysql
$ sudo mkdir mysql-files
$ sudo chown -R mysql:mysql /usr/local/mysql
$ sudo chown mysql:mysql mysql-files
$ sudo chmod 750 mysql-files

-R 옵션으로 해당 디렉토리 및 하위 디렉토리까지 권한 부여

$ sudo bin/mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

기본 DB를 생성하면 임시 비밀번호가 나타난다.

비밀번호를 기억한 후 mysql 서버 실행 및 확인하기

$ bin/mysqld_safe --user=mysql &
$ ps -ef | grep mysqld


mysql 프로세스가 실행되고 있음을 확인

$ bin/mysql -u root -p

mysql 실행

드디어 버전도 맞고 실행도 문제 없이 되는 MySQL!!!!

이제 임시비밀번호 변경만 하면 설치가 완료.

 alter user 'root'@'localhost' identified by '비밀번호';
profile
안녕하세요

0개의 댓글