CentOS에서 MySQL 8.0/9.0 설치 및 초기 설정 완벽 가이드 (YUM/DNF, CentOS 7/8/9 버전별 최신 설치 방법 및 오류 해결)

CentOS는 서버 환경에서 가장 널리 사용되는 리눅스 배포판 중 하나이며, MySQL은 전 세계적으로 가장 인기 있는 오픈소스 관계형 데이터베이스입니다. 안정적인 웹 서비스나 애플리케이션을 운영하기 위해서는 이 두 가지 핵심 요소를 올바르게 설치하고 설정하는 것이 중요합니다.

특히 2024년 CentOS 7의 지원 종료가 가까워지고, CentOS 8의 EOL(End-of-Life) 이후 CentOS Stream으로의 전환이 일반화되면서, CentOS 버전별로 MySQL을 설치하는 과정에 미묘한 차이가 생겼습니다. 본 가이드는 CentOS 7, 8, 9 Stream 환경 모두를 아우르는 최신 MySQL 8.0 및 9.0 설치 방법을 상세하게 다룹니다. 또한, 설치 후 필수적인 초기 보안 설정 및 흔히 발생하는 오류 해결 방법까지 완벽하게 제시하여 안정적인 DB 환경을 구축할 수 있도록 돕겠습니다.

⭐ CentOS 버전별 MySQL 설치를 위한 필수 준비 사항 확인하기

MySQL 설치를 시작하기 전에 시스템 환경을 점검하는 것이 중요합니다. CentOS 7은 YUM(Yellowdog Updater, Modified) 패키지 관리자를 사용하지만, CentOS 8과 9 Stream은 **DNF(Dandified YUM)**로 전환되었습니다. 또한, CentOS 기본 레포지토리에는 보통 MySQL 대신 MariaDB가 포함되어 있어, MySQL 공식 레포지토리를 추가하는 과정이 필수적입니다.

가장 먼저, 현재 사용 중인 CentOS 버전을 확인하고, 혹시 이전에 MariaDB나 다른 버전의 MySQL이 설치되어 있다면 충돌을 방지하기 위해 제거해야 합니다. 안정적인 데이터베이스 운영을 위해 MySQL 공식 저장소를 사용하는 것이 가장 권장됩니다.

💾 YUM/DNF을 이용한 MySQL 공식 레포지토리 추가 및 설치 보기

MySQL을 가장 안전하고 최신 버전으로 설치하는 방법은 MySQL 공식 Yum 저장소를 이용하는 것입니다. 이 방법은 CentOS 7 (YUM)과 CentOS 8/9 (DNF) 모두에서 적용 가능합니다. 먼저 MySQL Yum Repository를 시스템에 추가해야 합니다.

CentOS 7 환경에서 MySQL 8.0 설치 상세 더보기

CentOS 7에서는 yum 명령어를 사용합니다. 아래의 wget 명령어를 사용하여 최신 레포지토리 패키지를 다운로드하고 설치합니다. MySQL 8.0이 기본으로 설정됩니다.

# 1. 레포지토리 RPM 다운로드 sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-<최신버전>.noarch.rpm
2. MySQL 서버 설치
sudo yum install mysql-community-server -y
3. 서비스 시작 및 부팅 시 자동 실행 설정
sudo systemctl start mysqld sudo systemctl enable mysqld

CentOS 8/9 Stream 환경에서 MySQL 8.0/9.0 설치 확인하기

CentOS 8/9 Stream에서는 dnf 명령어를 사용하며, 과정은 7 버전과 유사하지만 DNF의 기능을 활용합니다. MariaDB가 기본적으로 활성화되어 있을 수 있으므로, 먼저 MariaDB 모듈을 비활성화하고 MySQL 모듈을 활성화하는 것이 좋습니다.

# 1. MariaDB 모듈 비활성화 (CentOS 8/9) sudo dnf module disable mariadb -y
2. MySQL 레포지토리 RPM 다운로드 및 설치 (CentOS 8/9용)
CentOS 버전에 맞는 최신 RPM 파일을 다운로드 (예: el9 for CentOS Stream 9)
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-<최신버전>.noarch.rpm -y
3. MySQL 서버 설치
sudo dnf install mysql-community-server -y
4. 서비스 시작 및 부팅 시 자동 실행 설정
sudo systemctl start mysqld sudo systemctl enable mysqld

참고: MySQL 9.0이 Release Candidate 등으로 발표될 경우, 위 과정에서 RPM 파일명만 mysql90-community-release 등으로 변경하여 적용할 수 있습니다. CentOS 공식 사이트에서 항상 최신 정보를 확인하는 것이 좋습니다.

🔒 MySQL 설치 후 초기 보안 설정 및 root 비밀번호 확인하기

MySQL 서비스가 성공적으로 시작되었다면, 이제 데이터베이스를 안전하게 보호하기 위한 초기 설정을 진행해야 합니다. MySQL 8.0/9.0 버전부터는 설치 후 임시 root 비밀번호가 자동으로 생성됩니다. 이 임시 비밀번호를 찾아 초기 보안 스크립트를 실행해야 합니다.

임시 root 비밀번호 확인 및 초기 보안 스크립트 실행 상세 더보기

임시 비밀번호는 보통 /var/log/mysqld.log 파일에 기록되어 있습니다. grep 명령어를 사용하여 쉽게 찾을 수 있습니다.

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

이 비밀번호를 복사한 후, mysql_secure_installation 스크립트를 실행하여 root 비밀번호를 변경하고 불필요한 보안 요소를 제거합니다.

# 2. 보안 설정 스크립트 실행 sudo mysql_secure_installation

스크립트 실행 중에는 다음 질문에 답하게 됩니다.

  • VALIDATE PASSWORD COMPONENT: 비밀번호 강도 검사 기능 활성화 여부입니다. 보안을 위해 **’Y’**를 권장하며, 비밀번호 정책 수준(LOW, MEDIUM, STRONG)을 선택합니다.
  • Change the root password?: 임시 비밀번호를 사용하여 로그인 후, 새롭고 강력한 root 비밀번호를 설정합니다.
  • Remove anonymous users?: 익명 사용자를 제거할지 묻습니다. **’Y’**를 선택하여 제거합니다.
  • Disallow root login remotely?: 원격에서 root 접근을 막을지 묻습니다. 보안을 위해 **’Y’**를 선택합니다.
  • Remove test database and access to it?: 테스트 데이터베이스를 제거합니다. **’Y’**를 선택합니다.
  • Reload privilege tables now?: 권한 테이블을 다시 로드합니다. **’Y’**를 선택합니다.

이 과정을 통해 데이터베이스의 가장 기본적인 보안 조치가 완료됩니다.

⚙️ 방화벽(FirewallD) 설정 및 외부 접속 허용 확인하기

CentOS 환경에서는 기본적으로 FirewallD가 활성화되어 있어, 외부에서 MySQL 데이터베이스에 접속하려면 방화벽에 포트(기본값: 3306)를 열어주어야 합니다. 만약 로컬 서버 내에서만 DB를 사용할 경우 이 단계를 건너뛰어도 됩니다.

FirewallD에서 MySQL 포트(3306) 열기 보기

외부에서 접속할 수 있도록 MySQL의 기본 포트인 3306을 방화벽에 영구적으로 추가하고 재로드합니다.

# 1. MySQL 기본 포트(3306) 허용 sudo firewall-cmd --permanent --add-port=3306/tcp
2. 방화벽 설정 재로드
sudo firewall-cmd --reload
3. 방화벽 상태 확인 (3306 포트가 추가되었는지 확인)
sudo firewall-cmd --list-ports

만약 다른 포트를 사용하거나 특정 IP에서만 접속을 허용하려면, --add-source=<IP주소> 옵션을 추가하거나 포트 번호를 변경하여 설정할 수 있습니다.

외부 접속을 위한 MySQL 사용자 권한 설정 상세 더보기

방화벽을 열었더라도, MySQL 내부에서 root 계정은 기본적으로 로컬(localhost)에서만 접속이 가능하도록 설정되어 있습니다. 외부에서 접속하기 위한 별도의 계정을 생성하거나 기존 계정의 권한을 수정해야 합니다.

# 1. MySQL 접속 (root 계정으로) mysql -u root -p
2. 새 사용자 생성 및 외부 접속 권한 부여
'username'과 'password'는 원하는 값으로 변경, '%'는 모든 외부 IP를 의미
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_strong_password';
3. 해당 사용자에게 모든 데이터베이스 권한 부여
GRANT ALL PRIVILEGES ON . TO 'remote_user'@'%' WITH GRANT OPTION;
4. 권한 적용
FLUSH PRIVILEGES;
5. MySQL 종료
EXIT;

이 과정을 거치면 ‘remote_user’ 계정으로 3306 포트를 통해 외부 PC나 웹 서버에서 CentOS MySQL 데이터베이스에 접속할 수 있게 됩니다.

❓ 자주 묻는 질문 (FAQ)

Q1. CentOS 7에서 MySQL 대신 MariaDB가 설치되는 이유는 무엇인가요?

A. CentOS(그리고 기반이 된 RHEL)의 기본 패키지 저장소(Base Repository)는 오랫동안 MariaDB를 MySQL의 기본 드롭인 대체품으로 포함해왔기 때문입니다. MariaDB는 MySQL의 창시자가 만든 포크 버전으로 높은 호환성을 가집니다. MySQL 8.0 이상 버전을 사용하려면 MySQL 공식 레포지토리를 시스템에 추가한 후 설치해야 합니다. 앞서 설명한 것처럼, DNF/YUM 명령을 사용하여 공식 레포지토리를 설치하는 것이 최신 버전을 유지하는 가장 좋은 방법입니다.

Q2. 설치 후 “Access denied for user ‘root’@’localhost'” 오류가 발생하면 어떻게 해야 하나요?

A. 이 오류는 주로 다음 두 가지 원인 중 하나입니다.

  1. 비밀번호 오류: 가장 흔한 경우로, 초기 임시 비밀번호를 잘못 입력했거나, mysql_secure_installation을 통해 설정한 새 비밀번호를 잘못 입력한 경우입니다.
  2. 인증 방식 문제: MySQL 8.0부터 기본 인증 방식이 caching_sha2_password로 변경되었는데, 구형 클라이언트(프로그래밍 언어 드라이버 등)가 이를 지원하지 않아 발생할 수 있습니다. 이 경우, MySQL에 접속하여 root 계정의 인증 방식을 mysql_native_password로 변경하는 SQL 명령을 실행해야 합니다.

Q3. CentOS 8/9에서 DNF를 사용했는데도 설치가 안 되고 오류가 납니다.

A. CentOS 8/9 Stream 환경에서는 DNF 모듈 시스템을 사용합니다. MySQL이나 MariaDB 중 하나를 설치하려면 다른 하나를 비활성화(Disable)해야 충돌이 발생하지 않습니다. 특히 MariaDB 모듈이 활성화되어 있다면 MySQL 설치가 실패할 수 있습니다. 반드시 sudo dnf module disable mariadb -y 명령을 실행하여 MariaDB를 비활성화한 후 MySQL 설치를 재시도해야 합니다.

Q4. MySQL 서비스를 재시작하거나 상태를 확인하는 명령어는 무엇인가요?

A. CentOS 7, 8, 9 Stream 모두 Systemd를 사용하므로 서비스 관리 명령어는 동일합니다.

  • 서비스 상태 확인: sudo systemctl status mysqld
  • 서비스 재시작: sudo systemctl restart mysqld
  • 서비스 종료: sudo systemctl stop mysqld
  • 부팅 시 자동 실행 활성화: sudo systemctl enable mysqld