로컬에서 vagrant 환경으로 MYSQL을 설치를 진행합니다.
vagrant를 사용하면 가상화 기술을 사용자로 하여금 쓰기 쉽고, 편하게 하여 개발 환경을 손쉽게 구축할 수 있기 때문입니다.
지금부터 로컬에서 vagrant 환경으로 MYSQL을 설치하는 방법에 대해서 설명합니다.
⬇️⬇️⬇️⬇️⬇️
brew란 ? mac os용 패키지 관리자
brew를 통해 vagrant를 설치할 것입니다!
# 쉘에서 아래의 명령어 수행 후 패스워드 입력하면 자동 설치 진행됨.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
vagrant란 ? 로컬에 구성하는 개발환경을 관리, 공유에 도움주는 툴
brew install virtualbox virtualbox-extension-pack vagrant ansible
(추가)명령어 끝에 ansible 추가 => ssh키를 생성할 때 오류가 나기 때문
# 아래와 같이 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 등의 계정을 해당하는 곳에 넣어주겠다는 뜻입니다.
❗️ 오류발생
플러그인 설치를 하지 않아서 생긴 오류
💡 해결vagrant plugin install vagrant-disksize
플러그인을 설치하면 해결!
플러그인 설치하면 해당명령어에 대한 에러는 사라지나 실질적으로 만들어진 vm에 들어가서 살펴보면 의도한 사이즈로 디스크 볼륨이 안올라가있을것
👍 여기까지의 centos 프로비저닝까지 정상적으로 진행되면 위의 명령어로 어느 경로에서든 터미널에서 바로 VM에접근 가능합니다.
해당컴퓨터에 virtualbox가 설치되어있다는 가정입니다!
virtualbox로 들어가서 vm이 잘 설치되었는지 확인해보는 과정에서 오류가 발생하는 것을 알았습니다.
❗️ 오류발생
virtualbox관리자에 들어가면 vm이 centos라는 이름으로 생성되어있다. 설정에 들어가면
하단에 잘못된 설정 감지됨이 뜬다.
💡 해결how?
Vagrantfile 에 스크립트(v.customize)를 추가하여 해결
- VMSVGA : 이 그래픽 컨트롤러를 사용하여 VMware SVGA 그래픽 디바이스를 에뮬레이트합니다.Linux 게스트의 기본 그래픽 컨트롤러입니다.
- 그래픽컨트롤러로 vmsvga를 사용합니다.
- vagrant virtualbox video memory를 20mb으로 세팅합니다.
여기서 잠깐!🖐 먼저 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을 깔고 재시도
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!
실행하면 virtualbox에서 linux 환경에 로그인하라는 창이 뜨는데 동일하게 'vagrant'입력하면 접속이 가능하다.
=> 이 방법은 잘 사용하지 않음
MySQL을 설치하는 방법에는 2가지가 존재하는데 먼저 정의를 알아보자.
- yum : yum은 Yellowdog Updater Modified 의 약자로 대화형 패키지 관리 시스템, 이전의 사용하던 rpm 명령어를 개선
- wget : 웹 서버로부터 콘텐츠를 가져오는 컴퓨터 프로그램으로, GNU 프로젝트의 일. 이 프로그램의 이름은 월드 와이드 웹과 get에서 가져온 것. HTTP, HTTPS, FTP 프로토콜을 통해 내려받기를 지원
장점 : central repository를 통해 패키지를 배포,의존성 관리 => 쉽게 패키지 관리가 가능
단점 : 설치가 빠르고 편리하다는 이점이 있지만 설치버전이 최신버전이 아닌 안정화된 버전(즉, 상대적으로 낮은 버전)으로 설치되는 단점 아닌 단점이 있다
장점 : 링크를 통해 다운로드를 쉽게 할 수 있음
단점 : 다운로드를 제외한 압축 풀고 설치하고 세팅하는 작업을 수동으로 진행
무엇을 사용하는 것이 더 좋은가?
rpm 과 wget의 장점을 합친 것이 yum이기 때문에 yum
이전의 사용하던 rpm은 프로그램 설치 시 특정 rpm패키지가 설치되어 있어야지만 다른 패키지 사용 가능 -> yum은 이를 개선해 자동 설치, 자동 삭제 해줌
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 자 이상
완료!!
1) database 생성>보기
2) table 생성>보기
3) user 생성하고 권한부여
❗️ 오류 발생
💡 해결
이것은 버전에 따른 명령어가 변경되었기 때문에 생긴 오류
mysql 8버전부터는 그 이전 부터의 명령어는 통하지 않고 계정 생성과 db 권한 부여를 각각 해줘야 함.
create user '아이디'@'%' identified by '비밀번호';
명령어를 통해 user를 생성하고 재실행
참고 포스팅
document를 보면서 설치해보기
(려고 했지만 압축 해제부터 오류 발생)how?
다운로드 받고 압축 해제를 진행했던 파일들을 모두 삭제
rm -r [mysql 압축파일]
&rm -r [mysql 압축해제파일]
로 다 삭제하고 같이 과제를 진행한 분의 블로그를 참고해 진행
아래의 명령어를 순서대로 입력
sudo yum install wget
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar
sudo yum localinstall mysql-community-*
sudo systemctl start mysqld
sudo systemctl stop mysqld
sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
mysql실행하고 비밀번호변경한 후
1) db 생성 및 조회
2) user 생성 및 권한 부여
vagrant destroy -f
로 vm삭제하고
그렇다면 먼저 ssh centos@192.168.56.11
로 centos 계정으로 들어갑니다.
다음은 mysql document를 보고 작성했습니다
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 의 파일 위치를 알아봅니다.
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
여기서 잠깐!! mysql은 계정이 다르다고 구분되어 있는게 아닙니다. 따라서 이전(mysql 5.7버전 설치 시)에 바꿔줬던 비밀번호를 입력해야 합니다. 만약 mysql 설치가 처음이라면 document를 보고 비밀번호를 설정하세요.
alter user 'root'@'localhost' identified by '사용할 비밀번호';
find /* -name mysqld.log
를 통해 mysql log 파일이 어디있는지 확인
하지만 permission denied 오류가 생김Why???
mysql log가 존재하는 파일을 들어가게 되면 주인이 mysql임
sudo를 통해 root 계정 권한을 빌려 보는 방법이 있음
unix 또는 linux 시스템에서 root는 무한대의 권한이 있습니다. 따라서 침입자들에게는 root 권한을 얻어내는 것이 최우선입니다. 즉 root 권한을 최소화 시키는 것이 보안의 시작이기 때문에 sudo 사용은 보안의 기본이라고 볼 수 있습니다.
둘다 패키지 관리자이지만, apt는 우분투 계열의 리눅스를 yum은 centos 의 리눅스를 사용하는 유저들이 각각의 명령어를 사용
vagrant destroy -f > vagrant up 을 통해 재생성해서 실습했습니다.
(참고) 이 과정에서 스크립트 내용을 정확히 적어주지 않아 생긴 오류가 발생
스크립트 내용만 잘 적어주면 해결됩니다.
(참고) 이 과정에서 ssh키 충돌 오류가 발생
- 장비에서 해당 아이피로 접근했던 장비의 인식자를 known_hosts를 등록해뒀는데 지금 접속하려는 장비는 그 인식자가 달라서 발생하는 메세지 베이그란트로 삭제했다가 재생성했기에 서로 다른 장비라고 인식하는 것
- 스푸핑과 같은 해킹으로 의심되기 때문에 경고를 출력
vi ~/nhn/.ssh/known_hosts
에 들어가 첫줄을 삭제하면 해결- 영구적으로 삭제 가능하지만 전체 키에 대한 인증 스킵은 보안상 좋지 않으니 특정 아이피 대역에서만 스킵을 걸어줍시다 참고 링크
vagrant destroy -f > vagrant up 시 설정파일을 유지하고 싶다면 vagrant로 생성한 vm을 복제해놓기
해당 링크 바로가기
# 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
왜 yum 보단 압축파일 다운로드?
yum으로 mysql을 다운로드받게 되면 실행파일,로그파일 등의 위치를 알 수 없고 관리할 포인트가 많아짐. 따라서 wget으로 바이너리압축파일을 다운로드 받고 특정 파일을 지정해서 사용하는 것
my.cnf 란?
- Unix 계열의 mysql 엔진에서 사용하는 configure 파일
- 본인의 계정에 mysql 접속정보가 저장됨
grub 란?
- GNU 프로젝트의 부트로더
- 부트로더란 리눅스가 부팅되기까지 부팅의 전과정을 진행하는 부팅전문프로그램을 의미
- 컴퓨터가 운영체제로 부팅하는 과정 : 컴퓨터 전원을 넣으면 제일 먼저 바이오스가 동작한후에 운영체제가 부팅될 수 있도록 이끌어주는 부트로더가 실행. 이후 운영체제로 부팅이 이뤄짐.
https://hocheon.tistory.com/118