Ubuntu(20.04 / 22.04 / 24.04)에서 MariaDB 설치 방법 – 완전한 설정 및 보안 가이드

目次

Ubuntu에 MariaDB를 가장 빠르게 설치하는 방법 (20.04 / 22.04 / 24.04 지원)

Ubuntu에서 MariaDB를 바로 사용하고 싶다면, 아래 단계대로 진행하여 설치와 시작 확인을 마치세요. 특별한 이유가 없는 한 Ubuntu 기본 저장소에서 설치하는 것이 가장 안전하고 안정적인 옵션입니다.

① 패키지 정보 업데이트

sudo apt update
sudo apt upgrade -y

② MariaDB 설치

sudo apt install -y mariadb-server mariadb-client

설치 중에 별도의 특별 설정이 필요하지 않습니다. 설치가 완료되면 MariaDB 서비스가 자동으로 시작됩니다.

③ MariaDB가 실행 중인지 확인

sudo systemctl status mariadb

active (running) 이 표시되면 MariaDB가 정상적으로 실행되고 있는 것입니다.

④ 자동 시작 활성화 (보통 필요 없지만 확인 권장)

sudo systemctl enable mariadb

⑤ MariaDB에 연결하고 동작 확인

sudo mysql

다음 프롬프트가 보이면 설치가 성공한 것입니다:

MariaDB [(none)]>

종료하려면 exit; 를 입력하세요.

설치 후 필수 보안 초기화

설치 직후 MariaDB는 최소한의 보안 설정만 적용됩니다. 다음 명령을 반드시 실행하세요:

sudo mysql_secure_installation

일반적으로 아래와 같이 답변하는 것이 권장됩니다:

  • 익명 사용자 제거 → Y
  • 원격 root 로그인 차단 → Y
  • 테스트 데이터베이스 제거 → Y
  • 권한 테이블 재로드 → Y

이로써 Ubuntu에서 보안이 강화된 MariaDB 환경 설정이 완료됩니다.

Ubuntu 버전에 따라 설치되는 MariaDB 버전

  • Ubuntu 20.04 → MariaDB 10.3 시리즈
  • Ubuntu 22.04 → MariaDB 10.6 시리즈
  • Ubuntu 24.04 → MariaDB 10.11 시리즈 (LTS)

대부분의 사용자는 Ubuntu 기본 버전으로 충분합니다. 최신 기능이 필요할 경우에만 공식 저장소를 고려하세요.

설치 실패 또는 서비스가 시작되지 않을 경우 빠른 점검

  • sudo systemctl status mariadb 로 오류 확인
  • sudo journalctl -xe 로 상세 로그 확인
  • df -h 로 디스크 공간 확인

대부분의 경우 문제는 디스크 공간 부족이나 설정 파일 오타 때문입니다.

Ubuntu 버전에 맞는 MariaDB 버전 선택

Ubuntu에서 MariaDB를 사용할 때 대부분의 경우 가장 안전한 선택은 기본 저장소 버전입니다. 보안 업데이트와 의존성 호환성이 자동으로 관리되어 초보자와 중급 사용자에게 적합합니다.

Ubuntu 기본 저장소 버전 (권장)

  • Ubuntu 20.04 → MariaDB 10.3 시리즈
  • Ubuntu 22.04 → MariaDB 10.6 시리즈
  • Ubuntu 24.04 → MariaDB 10.11 시리즈 (LTS)

특별한 요구 사항이 없는 한, 이 버전들은 프로덕션 환경에서도 충분히 실용적입니다.

최신 버전이 필요할 경우 (공식 MariaDB 저장소 추가)

최신 기능이 필요하다면 공식 MariaDB 저장소를 추가할 수 있습니다. apt-key가 폐기되었으므로, signed-by 방식을 사용합니다.

① GPG 키 저장

sudo mkdir -p /etc/apt/keyrings
sudo curl -fsSL https://mariadb.org/mariadb_release_signing_key.asc \
  | sudo gpg --dearmor -o /etc/apt/keyrings/mariadb.gpg

② Ubuntu 코드명 확인

lsb_release -cs

예시:

  • 20.04 → focal
  • 22.04 → jammy
  • 24.04 → noble

③ 공식 저장소 추가 (예: 10.11 시리즈)

echo "deb [signed-by=/etc/apt/keyrings/mariadb.gpg] \
https://mirror.mariadb.org/repo/10.11/ubuntu \
$(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/mariadb.list

④ 패키지 업데이트 및 설치

sudo apt update
sudo apt install mariadb-server mariadb-client

공식 저장소 사용 시 주의사항

  • Ubuntu 기본 버전보다 최신 기능을 사용할 수 있음
  • 향후 의존성 충돌 위험이 존재함
  • 프로덕션 서버에서는 충분한 테스트가 필요함

프로덕션 환경에서는 안정성에 중점을 둘지 최신 기능에 중점을 둘지 명확히 결정하세요.

현재 설치된 MariaDB 버전 확인 방법

mysql --version

예시:

mysql  Ver 15.1 Distrib 10.6.16-MariaDB

버전을 명시적으로 확인하면 문제 해결 및 마이그레이션 작업이 훨씬 쉬워집니다.

MariaDB 초기 보안 설정 완전 가이드 (mysql_secure_installation)

MariaDB를 설치한 직후에는 최소한의 보안 설정만 적용됩니다. 안전하게 운영하려면 다음 명령을 반드시 실행하십시오:

sudo mysql_secure_installation

실행하면 여러 프롬프트가 나타납니다. 대부분의 경우 다음과 같은 답변을 권장합니다.

권장 답변

  • Enter current password for root: → Enter 키를 누르세요 (첫 실행 시 설정되지 않음)
  • Switch to unix_socket authentication? → Y (Ubuntu에서 권장)
  • Change the root password? → N (unix_socket 인증을 사용하는 경우)
  • Remove anonymous users? → Y
  • Disallow root login remotely? → Y
  • Remove test database and access to it? → Y
  • Reload privilege tables now? → Y

이로써 기본 보안 구성이 완료됩니다.

root로 로그인할 수 없는 이유 (Access Denied 오류)

Ubuntu에서는 root 사용자가 기본적으로 unix_socket 인증을 사용합니다. 따라서 일반 비밀번호 기반 로그인은 작동하지 않습니다.

예시 증상

mysql -u root -p

Access denied for user 'root'@'localhost'

올바른 로그인 방법 (Ubuntu 기본값)

sudo mysql

가장 안전하고 권장되는 방법입니다.

root를 비밀번호 인증으로 변경하는 방법 (필요한 경우에만)

외부 도구나 애플리케이션에서 root로 연결해야 할 경우에만 인증 방식을 변경하십시오.

① MariaDB에 연결

sudo mysql

② 인증 플러그인 변경

ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'StrongPasswordHere';

FLUSH PRIVILEGES;

③ 변경 확인

SELECT user, host, plugin FROM mysql.user;

mysql_native_password가 표시되면 변경이 성공한 것입니다.

현재 인증 방법 확인 방법

sudo mysql -e "SELECT user, host, plugin FROM mysql.user;"

주요 인증 방법:

  • unix_socket → Ubuntu 기본, 안전
  • mysql_native_password → 비밀번호 기반 인증

특별한 이유가 없는 한, root는 unix_socket 인증을 유지하는 것이 가장 안전합니다.

일반적인 오류 및 해결 방법

ERROR 1698 (28000): 사용자 ‘root’@’localhost’에 대한 접근 거부

  • 원인: 비밀번호 기반 로그인 시도
  • 해결책: sudo mysql을 사용해 로그인

mysql_secure_installation을 찾을 수 없음

  • which mysql_secure_installation으로 확인
  • 설치되지 않은 경우 sudo apt install mariadb-server 실행

문자 인코딩을 utf8mb4로 설정 (깨진 문자 방지)

MariaDB에서 다국어 텍스트와 이모지를 안전하게 처리하려면 utf8mb4를 사용하는 것이 권장됩니다. 이 설정이 없으면 인코딩 문제나 데이터 손실이 발생할 수 있습니다.

① 설정 파일 편집

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

[mysqld] 섹션에 다음 줄을 추가하거나 수정하십시오:

[mysqld]
character-set-server = utf8mb4
collation-server     = utf8mb4_general_ci

② MariaDB 재시작

sudo systemctl restart mariadb

③ 설정 확인

sudo mysql -e "SHOW VARIABLES LIKE 'character_set%';"

utf8mb4가 표시되면 설정이 성공한 것입니다.

데이터베이스 생성 시 utf8mb4 지정 (권장)

전역 설정과 관계없이 문자 집합을 명시적으로 정의하고 싶다면, 데이터베이스 생성 시 지정하십시오.

CREATE DATABASE sample_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

이 데이터베이스 내에서 생성되는 모든 테이블은 utf8mb4를 상속합니다.

애플리케이션 사용자 생성 및 권한 부여

운영 환경에서는 애플리케이션 연결에 root 사용자를 절대 사용하지 말아야 합니다. 전용 사용자를 생성하고 최소한의 필요한 권한만 부여하십시오.

① MariaDB에 로그인하기

sudo mysql

② 사용자 생성 (로컬 연결)

CREATE USER 'app_user'@'localhost'
IDENTIFIED BY 'StrongPasswordHere';

③ 데이터베이스 권한 부여

GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'localhost';

FLUSH PRIVILEGES;

원격 액세스 사용자 생성 (필요한 경우에만)

외부 서버나 클라우드 환경에서 연결해야 할 경우에만 구성하십시오.

CREATE USER 'app_user'@'%'
IDENTIFIED BY 'StrongPasswordHere';

GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'%';

FLUSH PRIVILEGES;

Note: “%” 와일드카드는 모든 호스트에서의 연결을 허용합니다. 운영 환경에서는 특정 IP 주소를 지정하는 것이 더 안전합니다.

현재 사용자 및 권한 확인 방법

SELECT user, host FROM mysql.user;

SHOW GRANTS FOR 'app_user'@'localhost';

일반적인 권한 오류 및 해결 방법

Access denied for user ‘app_user’

  • 호스트 지정 오류 (localhost와 %의 차이)
  • FLUSH PRIVILEGES가 실행되지 않음
  • 연결 시 데이터베이스 이름 오류

Unknown database

  • 데이터베이스 이름 오타
  • 대상 데이터베이스에 권한이 부여되지 않음

MariaDB에서 원격 연결 허용 방법 (외부 접근 실패 시 해결)

기본적으로 MariaDB는 로컬 연결만 허용합니다. 외부 서버나 클라우드 환경에서 연결해야 할 경우 다음 설정을 구성하십시오.

① bind-address 변경

구성 파일을 편집하십시오:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

다음 줄을 찾으십시오:

bind-address = 127.0.0.1

외부 연결을 허용하려면 다음과 같이 변경하십시오:

bind-address = 0.0.0.0

저장 후 MariaDB를 재시작하십시오:

sudo systemctl restart mariadb

② 방화벽에서 포트 3306 열기

Ubuntu에서 UFW를 사용하는 경우:

sudo ufw allow 3306
sudo ufw reload

보안을 강화하려면 소스 IP 주소를 지정하십시오:

sudo ufw allow from 192.168.1.10 to any port 3306

③ 원격 액세스 사용자 생성

CREATE USER 'app_user'@'%'
IDENTIFIED BY 'StrongPasswordHere';

GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'%';

FLUSH PRIVILEGES;

보안을 강화하려면:

CREATE USER 'app_user'@'192.168.1.10'
IDENTIFIED BY 'StrongPasswordHere';

외부 연결이 안 될 때 체크리스트

1. MariaDB가 실행 중인가요?

sudo systemctl status mariadb

2. 포트 3306이 리스닝 중인가요?

sudo ss -tulnp | grep 3306

0.0.0.0:3306이 표시되면 모든 인터페이스에서 올바르게 리스닝 중인 것입니다.

3. 클라우드 환경(AWS / GCP / VPS) 사용 시

  • 보안 그룹에서 포트 3306이 열려 있는지 확인
  • 외부 방화벽이 연결을 차단하고 있지 않은지 확인

4. 오류 메시지에 따른 원인

MySQL 서버에 연결할 수 없음

  • 포트가 닫혀 있음
  • bind-address가 변경되지 않음
  • 방화벽이 연결을 차단

사용자에 대한 접근 거부

  • 사용자 호스트 지정 오류
  • 비밀번호 오류
  • 권한이 부여되지 않음

연결 시간 초과

  • 클라우드 측 보안 설정
  • 네트워크 라우팅 문제

중요한 보안 주의사항

  • 운영 환경에서 “%” 사용을 피하십시오
  • 가능한 경우 VPN 접근 사용
  • SSL/TLS 연결 활성화 고려
  • 원격 root 로그인 절대 허용 금지

MariaDB 시작 실패 시 문제 해결 (failed 오류)

① 서비스 상태 확인

sudo systemctl status mariadb

② 상세 로그 확인

sudo journalctl -xe
sudo cat /var/log/mysql/error.log

③ 일반적인 원인

  • 구성 파일 구문 오류
  • 디스크 공간 부족
  • 포트 충돌 (MySQL이 이미 실행 중)

④ 디스크 공간 확인

df -h

접근 거부 오류 원인 요약

  • 비밀번호 오류
  • 호스트 지정 오류 (localhost와 %의 차이)
  • FLUSH PRIVILEGES 미실행
  • root 표준 로그인 시도 (sudo mysql 필요)

기본 성능 향상 (초보자용)

Advanced tuning은 필요하지 않지만, 최소한 다음 설정을 확인하십시오.

① 슬로우 쿼리 로그 활성화

다음 내용을 50-server.cnf에 추가하십시오:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

MariaDB를 재시작하십시오:

sudo systemctl restart mariadb

② 인덱스 사용 확인

슬로우 쿼리는 적절한 인덱스가 없을 수 있습니다.

EXPLAIN SELECT * FROM sample_table WHERE column_name = 'value';

③ 서버 리소스 확인

top
htop

메모리가 부족하면 서버 플랜 업그레이드를 고려하십시오.

자주 묻는 질문 (FAQ)

Ubuntu 22.04에서 MariaDB 버전을 고정하려면 어떻게 해야 하나요?

apt-mark hold mariadb-server를 사용하십시오.

루트 비밀번호를 잊어버렸을 때 어떻게 재설정하나요?

안전 모드로 시작하고 비밀번호를 재구성하여 재설정할 수 있습니다. 자세한 단계는 전용 가이드를 참조하십시오.

MariaDB 포트 번호를 어떻게 변경하나요?

50-server.cnfport = 3307과 같이 수정한 뒤 서비스를 재시작하십시오.

결론: Ubuntu에서 MariaDB를 안전하게 사용하기

  • 기본 저장소 버전을 사용하는 것이 가장 안전한 옵션입니다
  • 항상 mysql_secure_installation을 실행하십시오
  • 애플리케이션 연결에 루트를 절대 사용하지 마십시오
  • 필요할 때만 원격 접근을 활성화하십시오
  • 문제 해결 시 로그 확인이 최우선입니다

이 단계들을 따라 하면 Ubuntu에서 보안이 강화된 프로덕션 수준의 MariaDB 환경을 구축할 수 있습니다.