[과제] 1. 로컬 환경에서 MySQL 설치

Jaehyeon Yoo·2022년 1월 10일

What? 무엇을 진행하나요?

로컬에서 Vagrant를 이용해 MySQL을 설치할 예정입니다.

Why? 왜 Vagrant를 이용하나요?

가상화 기술로 손쉽게 개발 환경을 구축할 수 있기 때문입니다.

여기서 잠깐! Vagrant란?

Vagrant는 포터블 가상화 소프트웨어 개발 환경의 생성 및 유지보수를 위한 오픈 소스 소프트웨어 제품의 하나입니다.

Vagrant는 독립적으로 사용되는 도구가 아니며, 가상 머신을 생성하거나 조작하는 기능을 직접 제공하지는 않습니다.

Vagrant에는 Provider라는 개념이 있어서 VirtualBox, VMWare, Docker, Hyper-V와 같은 도구들을 가상 머신을 관리하는 도구로 조합해서 사용할 수 있습니다.

How? 제 코드를 참조하시면 됩니다.

Vagrant를 사용하기 위해 다음 코드들을 순차적으로 Mac 터미널에 입력해 주시면 됩니다.

  1. brew를 설치합니다.
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

  2. visual studio code를 설치합니다.
    brew install --cask visual-studio-code

  3. Vagrant 사용을 위해 virtualbox를 설치합니다.
    brew install virtualbox virtualbox-extension-pack vagran

  4. Vargant 관련 파일이 만들어질 작업 폴더를 구성합니다.
    mkdir -p ~/workspace/VM/centos7

  5. 해당 워크스페이스로 이동합니다.
    cd /workspace/VM/centos7

  6. Vagrant를 통해 provisioning하는 가상머신의 모든 기능을 사용하기 위해 plugin을 설치합니다.
    vagrant plugin install vagrant-vbguest

  7. Vagrant 초기파일을 생성합니다.
    vagrant init

  8. touch init.yml

  9. 그 후, vi 에디터를 통해 위 코드를 통해 생성된 vagrantfile과 init.yml을 다음과 같이 수정해줍니다.

vagrantfile

ENV["LC_ALL"] = "en_US.UTF-8"
Vagrant.configure("2") do |centos|


# All servers will run cent 7
centos.vm.box = "centos/7"
centos.vm.box_check_update = false
centos.disksize.size = "60GB"


# Create the cent1 Server
N = 1
(1..N).each do |i|
hostname = "cent7-#{i}"
centos.vm.define hostname do |host1|
host1.vm.hostname = hostname
host1.vm.network "private_network", ip: "192.168.56.#{10 + i}"
host1.vbguest.auto_update = false
host1.vm.provider "virtualbox" do |v|
v.name = hostname
v.memory = "2048"
v.cpus = "2"
v.linked_clone = "true"
v.gui = "false"
v.customize ['modifyvm', :id, '--graphicscontroller', 'vmsvga']
v.customize ['modifyvm', :id, '--vram', '20']
end
end
end
centos.vm.provision "ansible" do |ansible|
ansible.playbook = "init.yml"
end
# centos.vm.provision "shell" do |shell|
# shell.path = "extend.sh"
# end
end

init.yml

- name: init.yml
hosts: all
gather_facts: no
become: yes
tasks:
- name: 사용자 이름 생성
user:
name: "{{ item }}"
shell: /bin/bash
home: "/home/{{ item }}"
generate_ssh_key: true
password_lock: yes
with_items:
- centos
- name: sudoers.d 추가
copy:
content: |
%{{item}} ALL=(ALL) NOPASSWD: ALL
dest: "/etc/sudoers.d/{{item}}"
owner: root
group: root
mode: 0440
validate: "/usr/sbin/visudo -c -f '%s'"
with_items:
- centos
- name: ssh 내용 추가
authorized_key:
user: "{{ item }}"
state: present
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
with_items:
- centos
- vagrant
- root
- name: Make sure a service unit is restarting
ansible.builtin.systemd:
state: restarted
name: sshd.service

마지막으로 vagrant up 명령어를 통해 가상 머신을 실행시킵니다.

Vagrant 가상 이미지 실행 및 SSH 접근

  1. SSH 접근을 위해 SSH 공개키를 먼저 만들어 줍니다.
    ssh-keygen

  2. vagrant 명령어를 통해 SSH로 접근합니다. vagrant up 명령어가 선행 되어야 합니다.
    vagrant ssh

  3. 인증키가 제대로 등록 되었는지 확인하는 코드입니다.
    cat ~/.ssh/authorized_keys

  4. Vagrant 가상 이미지 실행 및 SSH 접근이 올바르게 수행된 모습입니다.

  • 발생할 수 있는 오류와 해결 방법은 다음과 같습니다.
  1. brew install ansible을 통해 해결합니다.
  1. Vagrantfile에 설정된 IP 주소를 범위에 맞게 변경해 줍니다.

  2. https://blog.aeei.io/2021/07/24/occured-issues-in-k8s 블로그의 [문제 1]을 참고합니다.

지금부터 CentOS 환경에서 2가지 방법으로 MySQL을 설치해 보겠습니다.

1. yum repository를 이용하여 MySQL을 설치해 보겠습니다.

  1. MySQL을 설치합니다.
    sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

  2. yum -y install mysql-community-server

  3. MySQL을 실행합니다.
    systemctl start mysqld

  4. MySQL을 실행하면 임시 비밀번호가 생성되고 mysqld.log 파일 안에서 임시 비밀번호를 확인 할 수 있습니다.
    vi /var/log/mysqld.log

  5. 비밀번호를 재설정 합니다.
    ALTER USER 'root'@'localhost' IDENTIFIED BY '새 비밀번호';

  6. FLUSH PRIVILEGES;

  • 실행 파일, 로그 파일, 설정 파일의 위치입니다.
    (임의로 설정이 불가능합니다. 자동적으로 설치되는 경로입니다.)

    https://ondemand.tistory.com/301 블로그를 참고했습니다.
  1. 실행 파일
    /etc/rc.d/init.d/mysqld
  2. 로그 파일
    /var/log/mysqld.log
  3. 설정 파일
    /etc/my.config

2. 압축 파일을 이용하여 MySQL을 설치해 보겠습니다.

  1. wget 명령어 실행을 위해 라이브러리를 설치합니다.
    sudo yum install wget

  2. https://downloads.mysql.com/archives/community 로 이동합니다.원하는 버전의 다운로드를 마우스 우클릭 하여, 링크 주소를 복사합니다.

  3. wget을 통해 다운로드를 진행합니다.
    wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz

  4. 명령어를 통해 압축을 풀어줍니다.
    tar -xvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz

  5. 편의를 위해 파일 이름을 mysql로 변경합니다.
    mv mysql-8.0.27-linux-glibc2.12-x86_64/ mysql

  6. mysql 폴더의 소유자를 변경해줍니다.
    sudo chown -R centos:centos mysql

  7. mysql 폴더에 my.cnf 파일을 생성해줍니다.
    touch my.cnf

  8. 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
  1. data, log 폴더를 생성합니다.
    mkdir data
    mkdir logs

  2. 초기화 과정을 거친 후, mysql을 실행합니다.
    /home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf --initialize
    /home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf &

  3. logs 폴더에 있는 mysqld.log을 통해 임시 비밀번호를 확인합니다.

  4. mysql에 로그인합니다.
    /home/centos/mysql/bin/mysql -uroot -p'임시 비밀번호' -S/home/centos/mysql/mysql.sock

  5. 유저 할당 방식은 yum repository를 이용한 부분과 동일합니다.

  • 실행 파일, 로그 파일, 설정 파일의 위치입니다. (임의로 설정이 가능합니다.)
  1. 실행 파일

  2. 로그 파일

  3. 설정 파일
    home/centos/mysql/my.cnf

yum repository를 이용하는 것과 압축 파일을 이용하는 것의 차이는 무엇이 있을까요?

1, yum repository를 이용할 경우, 다운로드하는 파일들의 경로 설정을 임의로 지정할 수 없습니다.

2. yum repository가 편리하긴 하지만, 여러 의존성 문제들을 임의로 해결하기 위해
회사 내에서는 압축 파일을 이용하는 방식을 이용합니다.

0개의 댓글