로컬에서 Vagrant를 이용해 MySQL을 설치할 예정입니다.
가상화 기술로 손쉽게 개발 환경을 구축할 수 있기 때문입니다.
Vagrant는 포터블 가상화 소프트웨어 개발 환경의 생성 및 유지보수를 위한 오픈 소스 소프트웨어 제품의 하나입니다.
Vagrant는 독립적으로 사용되는 도구가 아니며, 가상 머신을 생성하거나 조작하는 기능을 직접 제공하지는 않습니다.
Vagrant에는 Provider라는 개념이 있어서 VirtualBox, VMWare, Docker, Hyper-V와 같은 도구들을 가상 머신을 관리하는 도구로 조합해서 사용할 수 있습니다.
Vagrant를 사용하기 위해 다음 코드들을 순차적으로 Mac 터미널에 입력해 주시면 됩니다.
brew를 설치합니다.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
visual studio code를 설치합니다.
brew install --cask visual-studio-code
Vagrant 사용을 위해 virtualbox를 설치합니다.
brew install virtualbox virtualbox-extension-pack vagran
Vargant 관련 파일이 만들어질 작업 폴더를 구성합니다.
mkdir -p ~/workspace/VM/centos7
해당 워크스페이스로 이동합니다.
cd /workspace/VM/centos7
Vagrant를 통해 provisioning하는 가상머신의 모든 기능을 사용하기 위해 plugin을 설치합니다.
vagrant plugin install vagrant-vbguest
Vagrant 초기파일을 생성합니다.
vagrant init
touch init.yml
그 후, 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 명령어를 통해 가상 머신을 실행시킵니다.
SSH 접근을 위해 SSH 공개키를 먼저 만들어 줍니다.
ssh-keygen
vagrant 명령어를 통해 SSH로 접근합니다. vagrant up 명령어가 선행 되어야 합니다.
vagrant ssh
인증키가 제대로 등록 되었는지 확인하는 코드입니다.
cat ~/.ssh/authorized_keys
Vagrant 가상 이미지 실행 및 SSH 접근이 올바르게 수행된 모습입니다.

brew install ansible을 통해 해결합니다.
Vagrantfile에 설정된 IP 주소를 범위에 맞게 변경해 줍니다.

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

1. yum repository를 이용하여 MySQL을 설치해 보겠습니다.
MySQL을 설치합니다.
sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum -y install mysql-community-server
MySQL을 실행합니다.
systemctl start mysqld
MySQL을 실행하면 임시 비밀번호가 생성되고 mysqld.log 파일 안에서 임시 비밀번호를 확인 할 수 있습니다.
vi /var/log/mysqld.log

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

- 실행 파일
/etc/rc.d/init.d/mysqld- 로그 파일
/var/log/mysqld.log- 설정 파일
/etc/my.config
2. 압축 파일을 이용하여 MySQL을 설치해 보겠습니다.
wget 명령어 실행을 위해 라이브러리를 설치합니다.
sudo yum install wget
https://downloads.mysql.com/archives/community 로 이동합니다.원하는 버전의 다운로드를 마우스 우클릭 하여, 링크 주소를 복사합니다.

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
편의를 위해 파일 이름을 mysql로 변경합니다.
mv mysql-8.0.27-linux-glibc2.12-x86_64/ mysql
mysql 폴더의 소유자를 변경해줍니다.
sudo chown -R centos:centos mysql
mysql 폴더에 my.cnf 파일을 생성해줍니다.
touch my.cnf
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
data, log 폴더를 생성합니다.
mkdir data
mkdir logs
초기화 과정을 거친 후, 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 &
logs 폴더에 있는 mysqld.log을 통해 임시 비밀번호를 확인합니다.

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

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

- 실행 파일
- 로그 파일
- 설정 파일
home/centos/mysql/my.cnf
1, yum repository를 이용할 경우, 다운로드하는 파일들의 경로 설정을 임의로 지정할 수 없습니다.
2. yum repository가 편리하긴 하지만, 여러 의존성 문제들을 임의로 해결하기 위해
회사 내에서는 압축 파일을 이용하는 방식을 이용합니다.