내가 한 노력들

[ Docker ] Linux환경에 MySQL8.0설치 및 설정 본문

IT 공부/Docker

[ Docker ] Linux환경에 MySQL8.0설치 및 설정

JONGI-N CHOI 2022. 12. 16. 10:37

Linux는 centos기반의 환경에서 설치해볼려고 합니다.

 

RPM을 이용한 설치를 하기위해서 centos 이미지를 통한, 컨테이너를 만들고 MySQL8.0를 설치할려 합니다. 

※RPM : Red Hat 기반의 패키지 매니저


Docker 환경

CentOS7 버전을 이용한 컨테이너 실행

docker run -d --privileged --name mysql8.0 centos:centos7 /sbin/init

위의 옵션들을 짧게 설명하자면

-d : 백그라운드로 실행

--privaileged : systemctl을 사용하기 위한 추가 옵션 

--name : 컨테이너 이름

centos:centos7 : centos 이미지를 사용하는데 버전을 7버전을 사용

/sbin/init : 사용할 명령어 

 

컨테이너에 추가 프로세스 실행 

docker exec -it mysql8.0 /bin/bash

실행중인 컨테이너에 명령어를 계속적으로 사용하기 위해서 위의 명령어를 추가적으로 입력하면 

root의 권한으로 접속이 됩니다. 

 


MySQL 서버 설치

 

MySQL를 RPM으로 설치하기 위해서는, 우선 MySQL 서버의 레포지토리가 필요합니다.

rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm

 

 

yum --showduplicates list | grep mysql-community-server

yum --showduplicates 명령어를 통해서, 설치 가능한 패키지의 목록을 보여주게 됩니다. 

메이저급의 버전 (5.5, 5.7, 8.0)을 설치할 때에는 최소 버전이 최소 15~20회 릴리즈 되어있는 버전을 선택하는 것이 좋다고 합니다. 

예를 들어서 8.0 버전을 설치할려고 한다면, 8.0.15 ~ 8.0.20 버전을 선택하는 것이 좋습니다. 

 

 

yum install -y mysql-community-server-8.0.21

위의 명령어로 MySQL서버를 설치합니다. 

 

제 환경에서는 여기 설치시에 문제가 하나 발생했는데, 

GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

위와 같은 에러가 발생해서, 검색해보니까 

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

위의 명령어를 입력 후, 다시 설치하는 것으로 에러를 해결할 수 있었습니다. 

 

 


MySQL 서버 설정

여기서는 테스트용으로 사용할 기본적인 서버 설정만 할 것 입니다.

서비스용으로 이용하기 위해서는 더 많은 설정을 찾아보고 설정하는 것이 좋습니다. 

 

tail -5 /etc/my.cnf

MySQL의 서버 설정파일이 my.cnf입니다. 

4줄의 간단한 설정만 있는 상태인데, 테스트에서는 이것만 사용하더라도 문제가 없습니다. 

 

MySQL 서버 초기화 

MySQL 서버를 설치는 했지만, 실행에 필요한 파일(시스템 테이블 저장 데이터 파일, 트랜젝션 로그 파일)들이 아직 만들어지지 않았기 때문에 아직은 실행이 불가능한 상태입니다. 

 

mysqld --defaults-file=/etc/my.cnf --initialize-insecure

위의 명령어를 실행하게 되면, MySQL 서버와 엔진이 초기화작업을 하며 파일이 만들어지고 root 계정이 생성 됩니다. 

 

맨 마지막의 -insecure 옵션을 추가하게 되면, 초기에 root 계정의 비밀번호를 없음으로 설정하는 것입니다. 

 

/var/log/mysqld.log

2022-12-16T01:16:45.459371Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.21) initializing of server in progress as process 195
2022-12-16T01:16:45.471521Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-12-16T01:16:46.031096Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-12-16T01:16:47.060265Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

위에서 my.cnf 를 보면 log 파일이 정의되어있었는데,  서버를 초기화하기 전에는 아무런 내용이 없지만

초기화를 하고난 뒤에는 위와같은 내용이 로그파일에 추가되어 있을 겁니다. 

 

MySQL의 서버와 InnoDB엔진이 초기화 됐다는 내용같고, 맨 마지막에 Warning 이라고 되어있는데 내용을 확인해보면 -insecure 옵션을 쓰지 말라는 의미인 것 같습니다. 

 

왜냐하면, 위에서 설명했듯이 -insecure 옵션을 추가하면 초기 비밀번호가 없는채로 root계정이 생성됨으로 안정성 문제가 발생함으로 주의를 하고 있는듯 합니다. 


MySQL 서버 실행

이제 서버를 실행할 수 있는 환경이 만들어졌기 때문에, 서버를 실행이 되는지를 확인해봅니다. 

 

권한 변경

서버의 실행전에 mysql로부터 여러 데이터 파일을 작성할 수 있도록, 파일의대한 권한을 줘야할 필요가 있습니다. 

chown -R mysql:mysql /var/lib/mysql

/var/lib/mysql이 mysql의 data 파일의 디렉토리이므로, 권한을 변경합니다. 

 

서비스 실행 

systemctl start mysqld

systemctl 이란 서비스파일들을 제어하고 관리해주는 명령어입니다.

 

서비스 파일들이 무엇이냐면, linux OS가 부팅을하게 되면 데몬이라는 시스템들이 자동적으로 실행되거나 초기화가 됩니다.  이러한 데몬 파일은 유저들이 관리하지 않고  백그라운드에서 이루어지게 됩니다. 

 

이러한 데몬 프로그램들은 systemd라는 프로세스에의해 제어되게 되는데, 파일이름 뒤에 .service가 붙게 됩니다. 

mysqld에서 마지막에 붙는 d도 데몬의 d를 의미합니다. 

 

MySQL를 설치하게되면, 자동적으로 /usr/lib/systemd/system/ 위치에 mysqld.service 라는 파일이 생성이 됩니다. 

그 말은, systemctl 명령을 이용해서 제어할 수 있다는 말입니다!

 

하지만, 이 과정에서 docker의 환경에 따라 에러가 발생할 수 있습니다. 

windows에서 최신의 docker 버전을 이용하는 경우에는 위의 과정을 따라온다면 문제가 없을 것이라고 생각되지만,

failed to get d-bus connection: no such file or directory

macos에서 docker 버전을 사용하는 경우에는 위와같은 에러가 발생할 수 있습니다. 

// ~/Library/Group\ Containers/group.com.docker/settings.json
{
  ...
  "deprecatedCgroupv1": false, // ← 여기를 true 변경
  ...
}

위와같은 설정을 해주게 된다면 해결 될 수 있습니다. 

그래도 해결이 안된다면, 따로 구글링을 통한 해결을 부탁드립니다..

 

systemctl status mysqld

status 옵션을 사용하면 상태를 확인할 수 있습니다.

active( running ) 으로 되어있는 것을 보면 무사히 실행중인 것을 볼 수 있습니다. 

 


MySQL 서버에 접속

이제 서버가 실행중이기 때문에, root 계정을 이용해 접속이 성공적으로 되는 것을 확인하고 마무리하겠습니다.

mysql -u root -p

 

위의 명령어를 입력하게 되면, password를 입력하라고 나오는데, 위에서 비밀번호가 없이 생성했기 때문에, 그냥 엔터를 누르면됩니다.

 

위의 사진처럼 나오게 되면 무사히 접속이 된 것을 알 수 있습니다. 

 


참고서적

Real Mysql8.0