과제 : 로컬에서 MYSQL 설치

호밀빵 굽는 쿼카·2022년 1월 4일
0

NHN Cloud 인턴

목록 보기
3/48

what? 무엇을 진행할 예정인가요?

로컬에서 vagrant 환경으로 MYSQL을 설치를 진행합니다.

why? 왜 vagrant 인가요?

vagrant를 사용하면 가상화 기술을 사용자로 하여금 쓰기 쉽고, 편하게 하여 개발 환경을 손쉽게 구축할 수 있기 때문입니다.

How? 어떻게?

지금부터 로컬에서 vagrant 환경으로 MYSQL을 설치하는 방법에 대해서 설명합니다.
⬇️⬇️⬇️⬇️⬇️


1. brew 설치

brew란 ? mac os용 패키지 관리자
brew를 통해 vagrant를 설치할 것입니다!

# 쉘에서 아래의 명령어 수행 후 패스워드 입력하면 자동 설치 진행됨.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2. vagrant 설치

vagrant란 ? 로컬에 구성하는 개발환경을 관리, 공유에 도움주는 툴

  • vm설정을 코드로 정의하고 이를 호출하여 개발환경에 대한 빠른 재생성 및 다른 위치에도 공유를 도와줌.
  • 로컬 테스트 환경을 만들기 위해 사용됨
 brew install virtualbox virtualbox-extension-pack vagrant ansible

(추가)명령어 끝에 ansible 추가 => ssh키를 생성할 때 오류가 나기 때문

3. 폴더에서 사용법

# 아래와 같이 vagrant 관련파일이 만들어질 작업폴더 구성 및 이동
mkdir -p /Users/nhn/workspace/VM/centos7
cd /Users/nhn/workspace/VM/centos7

vagrant plugin install vagrant-vbguest

-- 초기파일 생성.
vagrant init

touch init.yml
vi Vagrantfile

❗️ 오류발생
Vagrantfile과 init.yml에 스크립트를 추가하지않고 명령어를 실행해서 생긴 오류

💡 해결
Vagrantfile과 init.yml에 해당하는 스크립트 추가

  • init.yml 추가설명
    - {{item}}이라고 적힌 부분에 centos,vagrant 등의 계정을 해당하는 곳에 넣어주겠다는 뜻입니다.


4. 터미널에서 'vagrant up'명령어 실행

❗️ 오류발생
플러그인 설치를 하지 않아서 생긴 오류

💡 해결

vagrant plugin install vagrant-disksize

플러그인을 설치하면 해결!
플러그인 설치하면 해당명령어에 대한 에러는 사라지나 실질적으로 만들어진 vm에 들어가서 살펴보면 의도한 사이즈로 디스크 볼륨이 안올라가있을것

👍 여기까지의 centos 프로비저닝까지 정상적으로 진행되면 위의 명령어로 어느 경로에서든 터미널에서 바로 VM에접근 가능합니다.

5. virtualbox 관리자

해당컴퓨터에 virtualbox가 설치되어있다는 가정입니다!
virtualbox로 들어가서 vm이 잘 설치되었는지 확인해보는 과정에서 오류가 발생하는 것을 알았습니다.

❗️ 오류발생
virtualbox관리자에 들어가면 vm이 centos라는 이름으로 생성되어있다. 설정에 들어가면

하단에 잘못된 설정 감지됨이 뜬다.
💡 해결

how?

Vagrantfile 에 스크립트(v.customize)를 추가하여 해결

  • VMSVGA : 이 그래픽 컨트롤러를 사용하여 VMware SVGA 그래픽 디바이스를 에뮬레이트합니다.Linux 게스트의 기본 그래픽 컨트롤러입니다.
  • 그래픽컨트롤러로 vmsvga를 사용합니다.
  • vagrant virtualbox video memory를 20mb으로 세팅합니다.

6. vagrant 가상환경 실행

6.1 터미널에서 실행

  • 여기서 잠깐!🖐 먼저 ip를 확인합니다.
    =cat Vagrantfile하면 ip : "192.168.56.#{10+i}" 로 확인 가능

  • ssh centos@192.168.56.11 실행 => 오류발생!!!!!

why?

ansible provision이 되지 않아서 특정 시간 내에 접속이 되지 않아 timed out 오류가 난 것

링크 에 나온대로 방화벽도 열어봤는데도 동일한 오류 발생
💡 해결

why?

ansible이 깔려있지 않아서 ssh 키 배포가 제대로 안된 것!!!!
brew install ansible 명령어를 통해 ansible을 깔고 재시도


ssh키 관련 오류가 날 수 있습니다. 아래의 해결법을 참고하세요.

ssh 키가 없다면 생성하기

how?

1) 아래의 명령어를 통해 ssh키 생성

 ssh-keygen

2) ssh키 존재하는지 확인

cat ~/.ssh/id_rsa.pub

ssh-rsa 로 시작하면 키 있는 것입니다!

❗️ 오류발생
sudo ssh centos@192.168.56.11 명령어 > password입력 >

💡 해결
vagrant를 통한 확인

# Vagrantfile 파일이 위치한 곳으로 이동
cd ~/workspace/VM/centos7
# 베이그런트 기존 명령어를 통해 ssh 접근
vagrant ssh
# 인증키 등록여부 확인
cat ~/.ssh/authorized_keys
exit
# 인증키 확인
cat ~/.ssh/id_rsa.pub (확인하고)
# 키를 생성하고 vagrant provision을 수행
vagrant provision
# ssh 키를 통해 접근
ssh centos@192.168.56.11
나가고 싶다면 exit!

6.2 virtualbox 실행

실행하면 virtualbox에서 linux 환경에 로그인하라는 창이 뜨는데 동일하게 'vagrant'입력하면 접속이 가능하다.
=> 이 방법은 잘 사용하지 않음



(최종) MySQL을 설치하는 2가지 방법

MySQL을 설치하는 방법에는 2가지가 존재하는데 먼저 정의를 알아보자.

  • yum : yum은 Yellowdog Updater Modified 의 약자로 대화형 패키지 관리 시스템, 이전의 사용하던 rpm 명령어를 개선
  • wget : 웹 서버로부터 콘텐츠를 가져오는 컴퓨터 프로그램으로, GNU 프로젝트의 일. 이 프로그램의 이름은 월드 와이드 웹과 get에서 가져온 것. HTTP, HTTPS, FTP 프로토콜을 통해 내려받기를 지원

yum

  • 장점 : central repository를 통해 패키지를 배포,의존성 관리 => 쉽게 패키지 관리가 가능
  • 단점 : 설치가 빠르고 편리하다는 이점이 있지만 설치버전이 최신버전이 아닌 안정화된 버전(즉, 상대적으로 낮은 버전)으로 설치되는 단점 아닌 단점이 있다

wget

  • 장점 : 링크를 통해 다운로드를 쉽게 할 수 있음
  • 단점 : 다운로드를 제외한 압축 풀고 설치하고 세팅하는 작업을 수동으로 진행

무엇을 사용하는 것이 더 좋은가?

rpm 과 wget의 장점을 합친 것이 yum이기 때문에 yum

이전의 사용하던 rpm은 프로그램 설치 시 특정 rpm패키지가 설치되어 있어야지만 다른 패키지 사용 가능 -> yum은 이를 개선해 자동 설치, 자동 삭제 해줌

7.1 yum을 통한 MySQL 설치

1) yum을 통한 설치
root계정으로 설치 하지 않으면 오류가 생깁니다. 따라서,su 명령어를 통해 root 계정으로 이동하여 install을 진행합니다.

yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum -y install mysql-community-server

계정을 이동하지 않고 앞에 sudo 를 붙여주면 vagrant 계정에서도 설치 가능

2) 초기 root 비밀번호 확인
root계정에서

cat /var/log/mysqld.log | grep "temporary password"

확인한 비밀번호를 기억하고

3) mysql실행

mysql -u 사용자 -p
Enter password : 비밀번호 입력

초기에 비밀번호 바꿔주는거 필수!!로그인 후 정상적인 이용이 불가능한데, mysql에서 임의로 설정된 패스워드를 반드시 변경해야 정상적으로 사용가능

alter user 'root'@'localhost' identified by '사용할 비밀번호';

비밀번호는 대문자, 소문자, 숫자, 특수문자를 포함해야하고 암호 길이가 8 자 이상

완료!!

7.2 yum을 통해 설치한 MySQL로 db생성, user 생성

1) database 생성>보기

2) table 생성>보기

3) user 생성하고 권한부여

❗️ 오류 발생

💡 해결
이것은 버전에 따른 명령어가 변경되었기 때문에 생긴 오류
mysql 8버전부터는 그 이전 부터의 명령어는 통하지 않고 계정 생성과 db 권한 부여를 각각 해줘야 함.
create user '아이디'@'%' identified by '비밀번호';명령어를 통해 user를 생성하고 재실행

참고 포스팅

8.1 압축파일 풀어서 MySQL설치

document를 보면서 설치해보기
(려고 했지만 압축 해제부터 오류 발생)

how?

다운로드 받고 압축 해제를 진행했던 파일들을 모두 삭제
rm -r [mysql 압축파일] & rm -r [mysql 압축해제파일]로 다 삭제하고 같이 과제를 진행한 분의 블로그를 참고해 진행

아래의 명령어를 순서대로 입력

  • yum을 통해 wget을 install
    sudo yum install wget
  • wget을 통해 해당 최신버전의 mysql을 다운로드
    wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar
  • 다운로드 받은 tar파일을 압축해제
    tar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar
  • yum을 사용해 의존성 설치를 진행
    sudo yum localinstall mysql-community-*
  • mysql 시작
    sudo systemctl start mysqld
  • 다음단계를 위해 mysql stop
    sudo systemctl stop mysqld
  • 무제약모드로 MySQL을 실행하기 위해 작성한 코드
    sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

8.2 압축파일로 설치한 MySQL로 db생성, user 생성

mysql실행하고 비밀번호변경한 후


1) db 생성 및 조회
2) user 생성 및 권한 부여



최신버전의 mysql을 설치

vagrant destroy -f로 vm삭제하고

  • 가능한 최신버전의 mysql을 설치
  • 최대한 document를 보며 설치 => 왜냐하면 블로그를 보며 진행하는 것은 빠진 부분들이 있을 수 있고, document를 통해 진행하는 것이 오류를 해결해야하는 상황에서 더 좋기 때문입니다.
  • 설치한 mysql이 실제로 어디에 설치되었고 실행파일은 어디에 있는지 또 로그는 어디에 쌓이는지 살펴봅시다.
  • root계정이 아닌 centos계정으로 접근하는 연습을 합시다

그렇다면 먼저 ssh centos@192.168.56.11로 centos 계정으로 들어갑니다.

다음은 mysql document를 보고 작성했습니다

1) yum을 통한 설치

  • mysql --version 을 확인하면 mysql이 존재하지 않음을 확인

  • 먼저 주소를 복사
    1) https://www.mysql.com/products/community/ mysql 사이트 접속
    2) download mysql communit edition > mysql yum repository 클릭
    3) centos7을 사용하고 있기 때문에 oracle linux 7 을 선택해 줍니다.
    4) no thanks, just start my download의 주소링크를 복사

  • 명령어를 통해 mysql 최신버전을 다운로드

sudo yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm
  • mysql 패키지를 확인해봅니다.

  • mysql 을 설치해 줍니다.

  • mysql 의 파일 위치를 알아봅니다.

  1. find / -name mysqld 명령어를 통해 mysql 이 /etc/rc.d/init.d/mysqld 에서 실행됨을 알 수 있습니다.
/var/run/mysqld
/var/lock/subsys/mysqld
/usr/libexec/mysqld
/etc/rc.d/init.d/mysqld
  1. my.cnf mysql 설정파일은 /etc/my.cnf 에 위치합니다.
  • mysql을 sudo 를 통해 start 해줍니다.

    아마도 초기에 발급된 임시비밀번호를 확인해야 할 것 같습니다
  • mysql status를 sudo를 통해 mysql이 잘 작동되는지 확인
  • 임시비밀번호 확인

    여기서 잠깐!! mysql은 계정이 다르다고 구분되어 있는게 아닙니다. 따라서 이전(mysql 5.7버전 설치 시)에 바꿔줬던 비밀번호를 입력해야 합니다. 만약 mysql 설치가 처음이라면 document를 보고 비밀번호를 설정하세요.

  • mysql 접속
  • 초기 임시비밀번호 변경
    alter user 'root'@'localhost' identified by '사용할 비밀번호';
  • database 생성 및 확인
  • table 생성 및 확인
  • user 생성 및 권한 부여
  • mysql log 확인법
    1> find /* -name mysqld.log 를 통해 mysql log 파일이 어디있는지 확인
  • /var/log/mysqld.log 즉, /var/log 디렉토리에 존재


    하지만 permission denied 오류가 생김

    Why???


    mysql log가 존재하는 파일을 들어가게 되면 주인이 mysql임
    sudo를 통해 root 계정 권한을 빌려 보는 방법이 있음

왜 root 계정을 쓰는 것이 아니라 sudo를 통해 root 계정 권한을 빌려써야할까?

unix 또는 linux 시스템에서 root는 무한대의 권한이 있습니다. 따라서 침입자들에게는 root 권한을 얻어내는 것이 최우선입니다. 즉 root 권한을 최소화 시키는 것이 보안의 시작이기 때문에 sudo 사용은 보안의 기본이라고 볼 수 있습니다.

갑자기 생긴 의문점 - apt & yum 차이

둘다 패키지 관리자이지만, apt는 우분투 계열의 리눅스를 yum은 centos 의 리눅스를 사용하는 유저들이 각각의 명령어를 사용



2) 압축파일을 통한 설치

vagrant destroy -f > vagrant up 을 통해 재생성해서 실습했습니다.

(참고) 이 과정에서 스크립트 내용을 정확히 적어주지 않아 생긴 오류가 발생

스크립트 내용만 잘 적어주면 해결됩니다.

(참고) 이 과정에서 ssh키 충돌 오류가 발생

  • 장비에서 해당 아이피로 접근했던 장비의 인식자를 known_hosts를 등록해뒀는데 지금 접속하려는 장비는 그 인식자가 달라서 발생하는 메세지 베이그란트로 삭제했다가 재생성했기에 서로 다른 장비라고 인식하는 것
  • 스푸핑과 같은 해킹으로 의심되기 때문에 경고를 출력
  • vi ~/nhn/.ssh/known_hosts에 들어가 첫줄을 삭제하면 해결
  • 영구적으로 삭제 가능하지만 전체 키에 대한 인증 스킵은 보안상 좋지 않으니 특정 아이피 대역에서만 스킵을 걸어줍시다 참고 링크

vagrant destroy -f > vagrant up 시 설정파일을 유지하고 싶다면 vagrant로 생성한 vm을 복제해놓기
해당 링크 바로가기

  • document를 보며 mysql 설치
  • 아래의 명령어대로 실행
# wget 디운로드
$> sudo yum install wget
# 바이너리 압축파일을 다운로드
$> wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz
# 바이너리 압축파일 해제
$> tar -xvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz
# 편리를 위해 mv 로 이름을 변경
# 심볼릭 링크를 통해서도 변경가능
# ln -s full-path-to-mysql-VERSION-OS mysql
$> mv mysql-8.0.27-linux-glibc2.12-x86_64/ mysql
# mysql 폴더 일부 소유자 지정. 실행하는 게 centos여야하기 때문
$> sudo chown -R centos:centos mysql
# mysql 파일에 my.cnf 파일 생성 및 내용 추가
$> cd mysql
$> touch my.cnf
$> vi my.cnf

[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=mysql
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

basedir : MySQL 엔진 설치 위치
datadir : MySQL이 생성하는 파일들의 default위치
log-error : 로그가 쌓이는 위치
socket : 유닉스 소켓파일 경로명

$> mkdir data
$> mkdir logs
$> /home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf --initialize

❗️오류발생

👍 libaio 를 다운로드함으로써 해결

# my.cnf 파일 경로를 지정
$> /home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf --initialize
# mysql 실행
# my.cnf 경로를 지정해준 다음 mysqld 실행
$> /home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf &
# logs/mysqld.log 에서 임시비밀번호 찾기
$> cat mysqld.log

MySQL의 default configuration 파일의 위치는 한 곳에 지정되거나
어딘가에 명확히 명시되어서 실행되지 않는 것이 일반적이다. 이런 경우, 현재 mysql server가 어느 위치에 있는 my.cnf 파일을 읽었는지 경로를 설정해줌으로써 오류 해결

MySQL 인스턴스는 mysqld를 직접 호출하는 것이 아니라 mysqld_safe를 통해 시작시키는 것을 권장한다. mysqld_safe는 한마디로 말하면 mysqld를 감시하는 데몬이다.

/etc/init.d/mysql start

mysqld_safe가 구동

mysqld_safe가 mysqld를 구동한다.

mysql 폴더에서

$> /home/centos/mysql/bin/mysql -uroot -p'비밀번호' -S/home/centos/mysql/mysql.sock


mysql.sock

  • Unix Domain Socket -> TCP/IP와 같은 식으로 다룰 수 있는 통신 소켓
  • Mysql 서버 프로그램(데몬)과 클라이언트 프로그램(mysql)은 서로 다른 프로세스. 둘 사이에 통신이 이루어져야 어떤 일을 할 수 있음

왜 yum 보단 압축파일 다운로드?

yum으로 mysql을 다운로드받게 되면 실행파일,로그파일 등의 위치를 알 수 없고 관리할 포인트가 많아짐. 따라서 wget으로 바이너리압축파일을 다운로드 받고 특정 파일을 지정해서 사용하는 것

my.cnf 란?

  • Unix 계열의 mysql 엔진에서 사용하는 configure 파일
  • 본인의 계정에 mysql 접속정보가 저장됨

grub 란?

  • GNU 프로젝트의 부트로더
  • 부트로더란 리눅스가 부팅되기까지 부팅의 전과정을 진행하는 부팅전문프로그램을 의미
  • 컴퓨터가 운영체제로 부팅하는 과정 : 컴퓨터 전원을 넣으면 제일 먼저 바이오스가 동작한후에 운영체제가 부팅될 수 있도록 이끌어주는 부트로더가 실행. 이후 운영체제로 부팅이 이뤄짐.


참고링크

profile
열심히 굽고 있어요🍞

1개의 댓글