EC2 인스턴스에 MySQL 8.0 설치 및 설정 2025년 최신 가이드 Yum vs DNF 상세 더보기

EC2(Elastic Compute Cloud) 인스턴스는 유연하고 확장 가능한 클라우드 컴퓨팅 환경을 제공합니다. 특히 웹 애플리케이션이나 데이터베이스 서버를 구축할 때 널리 사용되는데, 이 가이드는 EC2 환경에서 널리 사용되는 데이터베이스인 MySQL을 설치하고 설정하는 최신 방법을 상세히 다룹니다. 특히 2025년 현재, 리눅스 배포판에 따라 yumdnf 명령어를 혼용하여 사용하거나 대체하는 경우가 많아졌으므로, 이 두 가지 도구를 모두 고려한 설치 절차를 안내합니다.

이 포스팅은 아마존 리눅스(Amazon Linux) 2 또는 CentOS, RHEL 계열의 EC2 인스턴스를 기준으로 작성되었으며, MySQL 8.0 버전을 중심으로 설명합니다. MySQL 8.0은 성능, 보안, NoSQL 기능 등 여러 면에서 향상된 기능을 제공하므로, 신규 프로젝트에 적극 권장됩니다.

2024년까지는 많은 가이드에서 yum 명령어를 주로 사용했지만, 현재는 최신 리눅스 배포판에서 dnf(Dandified YUM)가 yum을 대체하는 추세입니다. dnf는 의존성 해결 및 성능 면에서 개선되었으며, 기존 yum 사용자는 거의 동일한 문법으로 사용할 수 있습니다. 따라서 이 가이드에서는 두 가지 방식 모두를 활용할 수 있는 방법을 제시합니다.

EC2 MySQL 설치 사전 준비 확인하기

MySQL을 설치하기 전에 몇 가지 필수적인 사전 준비 단계가 필요합니다. EC2 인스턴스 접속부터 패키지 관리자 업데이트까지의 과정을 꼼꼼히 확인해야 안정적인 설치 환경을 확보할 수 있습니다.

EC2 인스턴스 접속 및 기본 환경 설정 보기

먼저 SSH를 통해 EC2 인스턴스에 접속합니다. 접속 후에는 시스템 패키지 목록을 최신 상태로 유지하는 것이 좋습니다. 이는 설치 과정에서 발생할 수 있는 의존성 문제를 최소화합니다.

# 시스템 패키지 목록 업데이트 (Amazon Linux, RHEL, CentOS 계열) sudo yum update -y
또는 최신 시스템에서는
sudo dnf update -y

만약 인스턴스에 yum 대신 dnf만 설치되어 있다면, 자동으로 dnf 명령어를 사용하면 됩니다. yum 명령어를 사용해도 dnf로 리디렉션되는 경우가 많습니다. 환경에 따라 이 명령어 중 하나를 선택하여 실행하십시오. 특히 보안을 위해 인바운드 규칙에 SSH 포트(기본 22)가 열려 있는지 확인하는 것이 중요하며, 데이터베이스 접속을 위한 포트(기본 3306)는 설치 후 설정할 예정입니다.

YUM DNF 활용한 MySQL 8.0 설치 절차 보기

MySQL은 공식적으로 리포지토리(Repository)를 제공하여 yum이나 dnf와 같은 패키지 관리자를 통해 쉽게 설치할 수 있도록 지원합니다. 이 방식이 가장 최신 버전의 MySQL을 안전하고 안정적으로 설치하는 방법입니다.

MySQL 리포지토리 설치 및 활성화 확인하기

먼저 MySQL 공식 리포지토리를 시스템에 추가해야 합니다. RPM 파일을 다운로드하여 설치함으로써 시스템의 패키지 관리자가 MySQL 패키지를 인식하게 만듭니다.

# 1. MySQL 8.0 리포지토리 패키지 다운로드 (최신 버전을 확인하세요) wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
2. 리포지토리 설치 (dnf 또는 yum 사용)
CentOS 7/RHEL 7 또는 Amazon Linux 2:
sudo yum localinstall mysql80-community-release-el7-3.noarch.rpm -y
CentOS 8/RHEL 8 등 최신 배포판:
sudo dnf localinstall mysql80-community-release-el8-1.noarch.rpm -y 

리포지토리 설치 후, MySQL 버전 선택을 확인하거나 원하는 버전을 활성화할 수 있습니다. 기본적으로 MySQL 8.0이 활성화되지만, 확인 차원에서 다음 명령어를 실행해볼 수 있습니다.

# dnf를 사용한 리포지토리 목록 확인 sudo dnf module list mysql
yum을 사용하는 경우 (dnf로 리디렉션될 수 있음)
sudo yum module list mysql

MySQL 서버 실제 설치 진행하기

리포지토리가 성공적으로 설정되었다면, 이제 MySQL 서버 패키지를 설치합니다. 이 과정에서 필요한 모든 의존성 패키지가 함께 설치됩니다.

# MySQL 서버 설치 (dnf 또는 yum 사용) sudo yum install mysql-community-server -y
또는
sudo dnf install mysql-community-server -y

설치가 완료되면, MySQL 서비스를 시작하고 부팅 시 자동으로 실행되도록 설정합니다.

# MySQL 서비스 시작 sudo systemctl start mysqld
부팅 시 자동 시작 설정
sudo systemctl enable mysqld
서비스 상태 확인
sudo systemctl status mysqld

서비스 상태가 active (running)으로 표시되면 성공적으로 설치 및 실행된 것입니다.

MySQL 초기 보안 설정 및 루트 비밀번호 변경 확인하기

MySQL 8.0은 설치 시 임시 루트 비밀번호를 자동으로 생성합니다. 이 임시 비밀번호를 사용하여 접속한 후, 보안을 위해 강력한 비밀번호로 변경하고 초기 보안 설정을 진행해야 합니다.

임시 비밀번호 확인 및 초기 접속 상세 더보기

임시 루트 비밀번호는 일반적으로 MySQL 서버 로그 파일에 저장됩니다. 다음 명령어를 사용하여 임시 비밀번호를 찾을 수 있습니다.

# 임시 비밀번호 확인 sudo grep 'temporary password' /var/log/mysqld.log

위 명령어로 출력되는 임시 비밀번호를 복사해둡니다. 이제 이 비밀번호로 MySQL에 접속합니다.

# MySQL 루트로 접속 mysql -u root -p

프롬프트에 복사해 둔 임시 비밀번호를 입력하여 접속합니다. 접속 후에는 즉시 새로운 강력한 비밀번호로 변경해야 합니다. MySQL 8.0은 기본적으로 강력한 비밀번호 정책을 적용합니다.

강력한 비밀번호 설정 및 보안 스크립트 실행

MySQL 내부에서 다음 명령어를 실행하여 새로운 비밀번호로 변경합니다. 비밀번호는 대문자, 소문자, 숫자, 특수문자를 포함한 8자 이상으로 설정하는 것이 안전합니다.

# 새 비밀번호 설정 (MySQL 프롬프트 내부에서 실행) ALTER USER 'root'@'localhost' IDENTIFIED BY '당신의_새로운_강력한_비밀번호'; FLUSH PRIVILEGES;

접속을 종료한 후, MySQL이 제공하는 보안 설정 스크립트를 실행하여 익명 사용자 제거, 원격 루트 로그인 차단 등의 추가 보안 조치를 취할 수 있습니다. 이 단계는 서버의 보안을 위해 반드시 진행해야 합니다.

# 보안 설정 스크립트 실행 (EC2 셸에서 실행) sudo mysql_secure_installation

스크립트가 안내하는 대로 비밀번호 유효성 검사 플러그인 설정, 익명 사용자 제거, 원격 루트 로그인 금지, 테스트 데이터베이스 제거 등의 질문에 응답하며 보안을 강화하십시오.

EC2 방화벽 보안 그룹 설정 및 외부 접속 설정 보기

MySQL 서버는 기본적으로 내부에서만 접근 가능하도록 설정되어 있습니다. 외부에서 데이터베이스에 접속하려면 EC2 인스턴스의 보안 그룹(Security Group)과 리눅스 방화벽 설정을 모두 수정해야 합니다.

EC2 보안 그룹 인바운드 규칙 추가 확인하기

EC2 인스턴스의 보안 그룹은 클라우드 레벨의 방화벽 역할을 합니다. 외부에서 MySQL 서버(기본 포트 3306)에 접속하려면, 이 포트에 대한 인바운드 규칙을 추가해야 합니다.

  • AWS 콘솔 접속: EC2 대시보드에서 해당 인스턴스의 보안 그룹을 선택합니다.
  • 인바운드 규칙 편집: ‘인바운드 규칙’ 탭으로 이동하여 ‘규칙 편집’을 클릭합니다.
  • 규칙 추가: ‘유형’은 MySQL/Aurora, ‘포트 범위’는 3306을 설정합니다.
  • 소스 설정: 접근을 허용할 IP 주소 또는 IP 범위(CIDR)를 지정합니다. 특정 IP만 허용하거나 0.0.0.0/0(전체 허용, 보안상 비권장)을 설정할 수 있습니다.

보안 그룹은 EC2 인스턴스에 대한 외부 트래픽을 제어하는 핵심 요소입니다. 가장 최소한의 필요한 IP만 허용하는 것이 보안 권장 사항입니다.

MySQL 원격 접속 사용자 생성 및 권한 부여

루트 계정으로 외부에서 접속하는 것은 보안상 위험하므로, 원격 접속 전용 사용자를 생성하고 필요한 권한만 부여하는 것이 일반적입니다.

# MySQL 프롬프트 내부에서 실행
1. 원격 접속 허용 사용자 생성 (host는 '%'로 설정하면 모든 IP에서 접속 가능)
CREATE USER '원격유저이름'@'%' IDENTIFIED BY '원격유저비밀번호';
2. 생성한 사용자에게 특정 데이터베이스에 대한 모든 권한 부여
GRANT ALL PRIVILEGES ON 데이터베이스이름.* TO '원격유저이름'@'%';
3. 권한 적용
FLUSH PRIVILEGES;

바인드 주소 설정 (선택 사항)

MySQL 8.0은 기본적으로 외부 접속이 차단되어 있을 수 있습니다. 설정 파일(/etc/my.cnf 또는 /etc/mysql/mysql.conf.d/mysqld.cnf)에서 bind-address 설정을 확인해야 합니다. 만약 bind-address = 127.0.0.1로 되어 있다면, 외부 접속이 불가능합니다. 외부 접속을 허용하려면 이 설정을 주석 처리하거나(모든 인터페이스 허용) 인스턴스의 사설 IP로 변경해야 합니다.

# /etc/my.cnf 파일 수정 예시
bind-address = 127.0.0.1 <- 이 줄을 찾아서
bind-address = 0.0.0.0 <- 이렇게 변경하거나
# bind-address = 127.0.0.1 <- 주석 처리합니다.

설정 파일 변경 후에는 반드시 MySQL 서비스를 재시작해야 변경 사항이 적용됩니다.

sudo systemctl restart mysqld

이러한 설정을 통해 EC2 외부에서 MySQL Workbench와 같은 도구를 사용하여 데이터베이스에 안전하게 접속할 수 있습니다.

2025년 EC2 MySQL 트렌드 및 최적화 가이드 상세 더보기

2024년 이후 클라우드 환경에서 MySQL 사용 트렌드는 보안 강화, 자동화, 그리고 AWS의 관리형 서비스(RDS) 활용으로 요약됩니다. 특히 EC2에 직접 설치하는 경우에도 이러한 트렌드를 반영한 최적화가 필요합니다.

MySQL 8.0 주요 최적화 옵션 보기

MySQL 8.0은 기본 설정으로도 좋은 성능을 제공하지만, EC2 인스턴스의 리소스(특히 메모리)에 맞춰 설정을 조정하면 성능을 더욱 높일 수 있습니다. 설정 파일(my.cnf)에서 다음 파라미터들을 조정할 수 있습니다.

  • innodb_buffer_pool_size: 가장 중요한 설정입니다. 사용 가능한 메모리의 50~70% 정도를 할당하는 것이 일반적입니다. 데이터와 인덱스를 캐시하여 I/O 성능을 획기적으로 개선합니다.
  • max_connections: 동시 접속 가능한 최대 클라이언트 수를 지정합니다. 애플리케이션 요구사항에 맞춰 설정합니다. 너무 높으면 메모리 부족을 초래할 수 있습니다.
  • query_cache_type / query_cache_size: MySQL 8.0에서는 쿼리 캐시 기능이 제거되었으므로, 관련 설정을 사용하지 않거나 제거해야 합니다.

RDS vs EC2 직접 설치 비교

2025년 현재, 소규모 테스트 환경이 아니라면 AWS의 관리형 데이터베이스 서비스인 Amazon RDS for MySQL을 사용하는 것이 일반적인 트렌드입니다. RDS는 백업, 복구, 패치, 모니터링 등의 관리 작업을 AWS가 대신 처리해주기 때문에 운영 부담이 크게 줄어듭니다.

하지만 EC2에 직접 설치하는 방식(Self-Managed)은 다음과 같은 장점이 있어 여전히 활용됩니다.

  • 세밀한 제어: 운영체제 및 MySQL 설정을 원하는 대로 완벽하게 커스터마이징 할 수 있습니다.
  • 비용 효율성: 인스턴스 사양 대비 RDS보다 낮은 비용으로 운영할 수 있는 경우가 있습니다.
  • 특정 요구사항 충족: RDS가 지원하지 않는 특정 MySQL 확장 기능이나 구 버전을 사용해야 할 때 유용합니다.

프로젝트의 규모와 요구되는 관리 수준을 고려하여 최적의 방식을 선택하는 것이 중요합니다.

EC2 MySQL 설치 시 발생할 수 있는 문제 해결 가이드 확인하기

EC2에 MySQL을 설치하고 운영하는 과정에서 몇 가지 일반적인 문제가 발생할 수 있습니다. 각 문제에 대한 해결 방법을 미리 숙지하면 시간을 절약할 수 있습니다.

'Public Key is not available' 오류 처리 보기

MySQL 리포지토리를 추가할 때 GPG 키와 관련된 오류가 발생할 수 있습니다. 이는 시스템이 MySQL 패키지의 서명을 확인할 수 없을 때 나타납니다. 다음 명령어로 GPG 키를 수동으로 가져와서 해결할 수 있습니다.

# GPG 키 가져오기 sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

키를 가져온 후, 설치 명령어를 다시 시도하십시오.

서비스 시작 실패 및 로그 확인 방법 보기

sudo systemctl status mysqld 명령어로 서비스 상태를 확인했을 때, 서비스가 시작되지 않는 경우(failed)가 있습니다. 이 경우 로그 파일을 확인하여 원인을 파악해야 합니다.

# 에러 로그 확인 sudo journalctl -xe | grep mysqld
또는 일반 로그 파일 확인
sudo tail -f /var/log/mysqld.log

로그를 통해 파일 권한 문제, 설정 파일 오류, 메모리 부족 등 구체적인 원인을 파악하고 해결할 수 있습니다. 특히 메모리 부족(OOM Killer) 문제가 발생하면 인스턴스 크기를 조정하거나 innodb_buffer_pool_size 설정을 줄여야 합니다. 로그 분석은 문제 해결의 첫걸음입니다.

자주 묻는 질문 FAQ 신청하기

EC2 인스턴스에 MySQL을 설치할 때 Yum과 DNF 중 무엇을 사용해야 하나요?

Amazon Linux 2나 CentOS 7 같은 구 버전 기반 인스턴스는 yum을 사용해도 됩니다. 하지만 CentOS 8, RHEL 8 등의 최신 배포판을 사용하거나 향후 유지보수를 고려한다면 dnf를 사용하는 것이 좋습니다. dnfyum의 후속 버전으로, 의존성 관리와 성능이 개선되었습니다. 많은 최신 시스템에서 yum 명령어를 입력해도 내부적으로 dnf가 실행되기도 합니다.

MySQL 8.0 설치 후 루트 비밀번호를 잊어버렸을 때 어떻게 해야 하나요?

비밀번호를 잊어버렸다면, MySQL 서버를 안전 모드(Skip Grant Tables)로 재시작하여 비밀번호 없이 접속한 후, 비밀번호를 재설정할 수 있습니다. 이 과정은 보안상 민감하므로, 서버를 잠시 정지하고 설정 파일을 수정한 후 비밀번호를 재설정해야 합니다. 재설정 후에는 반드시 서버를 정상 모드로 재시작해야 합니다.

EC2 보안 그룹에 3306 포트를 개방하는 것이 안전한가요?

3306 포트를 0.0.0.0/0(모든 IP)으로 개방하는 것은 매우 위험합니다. 보안을 위해 특정 사무실 또는 개발자의 IP 주소(CIDR)만을 소스로 지정하여 필요한 최소한의 접속만 허용해야 합니다. 만약 외부 접속이 필요하지 않다면 아예 개방하지 않거나, EC2 인스턴스 내부의 프라이빗 네트워크(VPC) 내에서만 접속하도록 설정하는 것이 가장 안전합니다.