RockyLinux 10 MariaDB 11.8 설치 및 운영 환경 구성

  • 1st July 2026
  • 10 min read

본 문서는 RockyLinux 10 환경에서 MariaDB 11.8을 설치하고 기본 운영 환경을 구성하는 방법을 정리한 매뉴얼입니다. 앞선 글에서 RockyLinux 기본 설정, PHP 8.5, PHP-FPM, Valkey, Nginx 구성을 진행했다면, 이번 글에서는 웹 애플리케이션의 핵심 데이터 저장소가 되는 MariaDB를 설치합니다.

MariaDB는 MySQL과 호환되는 오픈소스 RDBMS이며, PHP 기반 CMS, 게시판, 업무 시스템, 대관 시스템, 관리자 페이지 등에서 가장 많이 사용하는 데이터베이스 중 하나입니다. RockyLinux 기본 저장소에도 MariaDB 패키지가 포함될 수 있지만, 최신 버전인 MariaDB 11.8을 사용하려면 MariaDB 공식 저장소를 직접 구성하는 것이 좋습니다.

이 글에서는 MariaDB 공식 Repository를 추가하고, MariaDB Server와 Client를 설치한 뒤, 서비스 시작, 자동 실행 등록, 초기 보안 설정, 기본 접속 확인까지 진행합니다.


1. MariaDB 11.8을 별도 Repository로 설치하는 이유

RockyLinux는 안정성을 중시하는 배포판이므로 기본 저장소에 포함된 패키지 버전이 최신 버전보다 낮을 수 있습니다. 운영 서버에서는 배포판 기본 패키지를 사용하는 것도 안정적인 선택이지만, 최신 기능이나 장기 운영 계획을 고려한다면 MariaDB 공식 저장소를 사용하는 방식도 많이 사용합니다.

특히 신규 서버를 구축하는 상황이라면 처음부터 사용할 MariaDB 버전을 명확히 정하고 설치하는 것이 좋습니다. 나중에 DB 버전을 올리는 작업은 애플리케이션 호환성, 백업, 마이그레이션, 다운타임 문제까지 함께 고려해야 하므로 단순 패키지 업데이트보다 훨씬 부담이 큽니다.

  • 버전 명확성: 서버 구축 시점에 사용할 MariaDB 버전을 명확하게 고정할 수 있습니다.

  • 최신 기능 사용: 기본 저장소보다 최신 MariaDB 기능을 사용할 수 있습니다.

  • 운영 표준화: 여러 서버를 동일 버전으로 구성하기 쉽습니다.

  • 업그레이드 관리: MariaDB 공식 저장소 기준으로 업데이트 흐름을 관리할 수 있습니다.


2. MariaDB Repository 확인

MariaDB는 공식 사이트에서 운영체제와 버전을 선택하면 Repository 설정 파일을 제공합니다. 설치 전에 아래 MariaDB Repository 설정 페이지에서 사용하려는 버전과 OS를 확인하는 것이 좋습니다.

https://downloads.mariadb.org/mariadb/repositories

이 글에서는 MariaDB 11.8을 기준으로 설명합니다. 실제 운영 시점에 따라 minor 버전이나 mirror 주소가 달라질 수 있으므로, 운영 서버에 적용하기 전에 공식 Repository 페이지에서 최신 내용을 확인하는 것이 좋습니다.


3. MariaDB Repository 파일 생성

MariaDB 공식 저장소를 사용하기 위해 /etc/yum.repos.d/MariaDB.repo 파일을 생성합니다.

vi /etc/yum.repos.d/MariaDB.repo

아래 내용을 입력합니다. mirror 주소는 예시이며, 실제 운영 환경에서는 MariaDB 공식 Repository 페이지에서 생성된 값을 사용하는 것을 권장합니다.

[mariadb]
name = MariaDB
baseurl = https://rpm.mariadb.org/11.8/rhel/$releasever/$basearch
gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1

특정 mirror를 사용하고 싶다면 baseurlgpgkey를 mirror 주소로 변경할 수 있습니다. 다만 mirror 서버는 지역이나 운영 상태에 따라 일시적으로 응답이 느리거나 중단될 수 있으므로, 운영 서버에서는 안정적인 mirror를 선택해야 합니다.

예를 들어 특정 mirror를 사용하는 형태는 다음과 같습니다.

[mariadb]
name = MariaDB
baseurl = https://tw1.mirror.blendbyte.net/mariadb/yum/11.8/rhel/$releasever/$basearch
gpgkey = https://tw1.mirror.blendbyte.net/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1

gpgcheck = 1은 패키지 서명 검증을 사용한다는 의미입니다. 운영 서버에서는 패키지 무결성 확인을 위해 이 값을 유지하는 것이 좋습니다.


4. Repository 적용 확인

Repository 파일을 생성한 뒤 dnf가 MariaDB 저장소를 정상적으로 인식하는지 확인합니다.

dnf clean all
dnf makecache
dnf repolist | grep -i mariadb

MariaDB 저장소가 목록에 표시되면 정상적으로 등록된 것입니다. 만약 표시되지 않는다면 파일명, repo 문법, baseurl 주소, 네트워크 접근 상태를 확인해야 합니다.


5. MariaDB Server와 Client 설치

이제 MariaDB 서버와 클라이언트 패키지를 설치합니다.

dnf install -y MariaDB-server MariaDB-client

MariaDB-server는 실제 데이터베이스 서버 데몬을 포함하고, MariaDB-client는 mysql 또는 mariadb 명령으로 DB에 접속하기 위한 클라이언트 도구를 제공합니다.

설치 후 버전을 확인합니다.

mariadb --version
mysql --version

MariaDB 11.8 계열 버전이 표시되면 정상입니다.


6. MariaDB 서비스 시작 및 자동 실행 등록

설치가 끝나면 MariaDB 서비스를 시작합니다.

systemctl start mariadb

서버 재부팅 후에도 자동으로 실행되도록 등록합니다.

systemctl enable mariadb

서비스 상태를 확인합니다.

systemctl status mariadb

active (running) 상태가 표시되면 MariaDB 서버가 정상적으로 실행 중입니다.


7. MariaDB 접속 확인

root 계정으로 MariaDB에 접속해봅니다.

mariadb -u root

또는 다음 명령을 사용할 수도 있습니다.

mysql -u root

접속 후 버전을 확인합니다.

SELECT VERSION();

DB 접속을 종료하려면 아래 명령을 입력합니다.

exit;

8. 초기 보안 설정

MariaDB 설치 직후에는 테스트 DB, anonymous user, root 원격 접속 등 운영 환경에 불필요한 설정이 남아 있을 수 있습니다. 따라서 초기 보안 설정을 진행하는 것이 좋습니다.

mariadb-secure-installation

이 명령은 대화형으로 진행되며, 일반적으로 다음 항목을 설정합니다.

  • root 비밀번호 설정 또는 인증 방식 확인: root 계정의 접속 방식을 점검합니다.

  • anonymous user 제거: 익명 접속 계정을 제거합니다.

  • root 원격 접속 차단: 외부에서 root로 직접 접속하지 못하도록 합니다.

  • test database 제거: 기본 테스트 DB를 제거합니다.

  • 권한 테이블 재로딩: 변경된 권한 정보를 즉시 반영합니다.

운영 서버에서는 root 계정의 원격 접속을 막고, 애플리케이션별 전용 DB 계정을 만들어 사용하는 것이 기본입니다.


9. 데이터베이스와 사용자 계정 생성

웹 애플리케이션에서 사용할 데이터베이스와 계정을 생성합니다. 예시는 app_db, app_user라는 이름을 사용합니다. 실제 서버에서는 프로젝트명에 맞게 변경하면 됩니다.

mariadb -u root -p
CREATE DATABASE app_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY '강력한비밀번호';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;

PHP 애플리케이션과 MariaDB가 같은 서버에 있다면 'app_user'@'localhost' 형태로 제한하는 것이 좋습니다. 다른 서버에서 접속해야 하는 구조라면 접속 서버의 IP를 명시적으로 허용하는 방식이 안전합니다.

예를 들어 웹서버 IP가 10.0.0.10이라면 다음과 같이 계정을 만들 수 있습니다.

CREATE USER 'app_user'@'10.0.0.10' IDENTIFIED BY '강력한비밀번호';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'10.0.0.10';
FLUSH PRIVILEGES;

10. 문자셋 설정 확인

한국어 웹사이트에서는 문자셋 설정이 중요합니다. 현재 서버의 기본 문자셋을 확인합니다.

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

신규 프로젝트라면 기본적으로 utf8mb4를 사용하는 것이 좋습니다. utf8mb4는 한글뿐만 아니라 이모지와 다양한 유니코드 문자를 저장할 수 있습니다.

전체 서버 기본값을 조정하고 싶다면 MariaDB 설정 파일에 다음 내용을 추가할 수 있습니다.

vi /etc/my.cnf.d/server.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

설정을 변경한 뒤 MariaDB를 재시작합니다.

systemctl restart mariadb

단, 이미 생성된 데이터베이스와 테이블의 문자셋은 자동으로 바뀌지 않습니다. 기존 데이터가 있는 경우에는 별도의 ALTER 작업이 필요합니다.


11. 외부 접속 허용 여부

MariaDB는 가능하면 외부에 직접 노출하지 않는 것이 좋습니다. PHP와 MariaDB가 같은 서버에 있다면 localhost 접속만 허용하는 구성이 가장 단순하고 안전합니다.

외부 DB 접속이 필요한 경우에는 다음 사항을 반드시 확인해야 합니다.

  • bind-address 설정: MariaDB가 외부 IP에서 접속을 받을 수 있도록 설정되어 있어야 합니다.

  • 방화벽 허용: 3306 포트를 필요한 IP에 대해서만 허용해야 합니다.

  • DB 계정 host 제한: 'user'@'%'처럼 전체 허용하지 말고 특정 IP로 제한하는 것이 좋습니다.

  • VPN 또는 내부망 사용: 가능하면 공인망이 아니라 VPN 또는 사설망을 통해 접근하도록 구성합니다.

외부 접속을 열어야 한다면 MariaDB 설정 파일에서 다음 항목을 확인합니다.

vi /etc/my.cnf.d/server.cnf
[mysqld]
bind-address = 0.0.0.0

그러나 0.0.0.0은 모든 네트워크 인터페이스에서 접속을 받겠다는 의미이므로, 방화벽과 계정 권한을 반드시 함께 제한해야 합니다.


12. 방화벽에서 MariaDB 포트 허용

같은 서버 내부에서만 MariaDB를 사용한다면 3306 포트를 열 필요가 없습니다. 외부 웹서버나 관리 서버에서 DB에 접속해야 하는 경우에만 방화벽을 설정합니다.

모든 IP에 3306 포트를 개방하는 방식은 권장하지 않습니다. 가능한 경우 특정 IP만 허용합니다.

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.10" port protocol="tcp" port="3306" accept'
firewall-cmd --reload

설정 후 방화벽 목록을 확인합니다.

firewall-cmd --list-all

DB 서버는 웹서버보다 더 민감한 서버입니다. 3306 포트를 공인 인터넷에 직접 개방하는 구성은 피하는 것이 좋습니다.


13. PHP에서 MariaDB 접속 확인

앞선 2편에서 PHP 8.5와 php-mysql 확장을 설치했다면, PHP에서 PDO 또는 mysqli를 통해 MariaDB에 접속할 수 있습니다. 간단한 PDO 접속 테스트 파일을 작성합니다.

<?php

$host = '127.0.0.1';
$dbname = 'app_db';
$user = 'app_user';
$password = '강력한비밀번호';

try {
    $pdo = new PDO(
        "mysql:host={$host};dbname={$dbname};charset=utf8mb4",
        $user,
        $password,
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    );

    $stmt = $pdo->query('SELECT VERSION() AS version');
    $row = $stmt->fetch();

    echo 'MariaDB Version: ' . $row['version'];
} catch (PDOException $e) {
    echo 'DB Connection Failed: ' . $e->getMessage();
}

운영 서버에서는 위와 같은 테스트 파일을 웹 루트에 오래 두지 않는 것이 좋습니다. 접속 확인 후에는 삭제하거나 외부 접근이 불가능한 위치로 옮겨야 합니다.


14. 기본 설정 파일 위치

MariaDB 설정 파일은 설치 방식과 배포판에 따라 조금씩 다를 수 있습니다. RockyLinux에서 MariaDB 공식 패키지를 사용하는 경우 일반적으로 다음 경로를 확인합니다.

  • /etc/my.cnf: 기본 MariaDB 설정 진입 파일입니다.

  • /etc/my.cnf.d/server.cnf: 서버 데몬 관련 설정을 작성하는 파일입니다.

  • /var/lib/mysql: 기본 데이터 디렉터리입니다.

  • /var/log/mariadb: 로그 파일이 위치할 수 있는 경로입니다. 설정에 따라 다를 수 있습니다.

데이터 디렉터리를 /data/mysql과 같은 별도 디스크로 옮기는 경우에는 설치 직후, 실제 운영 데이터를 넣기 전에 진행하는 것이 안전합니다. 이미 데이터가 쌓인 뒤 datadir을 이동하려면 서비스 중지, 권한 유지, SELinux context, socket 경로, 백업까지 함께 고려해야 합니다.


15. 운영 전 확인하면 좋은 항목

MariaDB 설치 직후에는 기본값만으로도 동작하지만, 운영 서버에서는 몇 가지 항목을 미리 확인하는 것이 좋습니다.

  • 메모리 사용량: 서버 RAM에 맞춰 InnoDB Buffer Pool 크기를 조정합니다.

  • slow query log: 느린 쿼리를 추적하기 위해 활성화 여부를 검토합니다.

  • max_connections: 동시 접속 수가 많은 사이트라면 기본값이 충분한지 확인합니다.

  • table_open_cache: 테이블이 많은 CMS나 멀티사이트 구조라면 조정이 필요할 수 있습니다.

  • backup 정책: DB 서버는 설치보다 백업 정책이 더 중요합니다. 정기 dump, 증분 백업, 원격 백업 중 하나 이상을 반드시 구성해야 합니다.

단, 튜닝 값은 서버 사양과 서비스 성격에 따라 달라집니다. 무조건 특정 값을 복사해서 적용하기보다 실제 메모리, 트래픽, 쿼리 패턴을 보고 조정해야 합니다.


16. 간단한 운영용 설정 예시

아래는 소규모 또는 중간 규모 PHP 웹서비스에서 참고할 수 있는 기본 설정 예시입니다. 그대로 적용하기보다는 서버 메모리와 서비스 규모에 맞춰 조정해야 합니다.

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

skip-name-resolve

max_connections = 300
table_open_cache = 2000
table_definition_cache = 1000

innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_log_buffer_size = 64M

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

skip-name-resolve는 DB 접속 시 DNS 역조회로 인한 지연을 줄이는 데 도움이 됩니다. 이 옵션을 사용하면 DB 계정의 host 부분에 도메인 대신 IP 또는 localhost를 사용하는 것이 좋습니다.

innodb_buffer_pool_size는 InnoDB 성능에 큰 영향을 주는 값입니다. DB 전용 서버라면 전체 메모리의 상당 부분을 할당할 수 있지만, 웹서버와 DB가 같은 서버라면 PHP-FPM, Nginx, OS가 사용할 메모리를 충분히 남겨야 합니다.


17. 로그 디렉터리 권한 확인

slow query log를 별도 파일로 지정하는 경우 로그 디렉터리와 파일 권한을 확인해야 합니다.

mkdir -p /var/log/mariadb
chown mysql:mysql /var/log/mariadb
chmod 750 /var/log/mariadb

설정 변경 후 MariaDB를 재시작합니다.

systemctl restart mariadb
systemctl status mariadb

재시작에 실패하면 설정 문법 오류가 있을 수 있으므로 journal 로그를 확인합니다.

journalctl -u mariadb -xe

18. 백업 기본 명령

MariaDB 운영에서 가장 중요한 것은 백업입니다. 설치 직후에도 백업 명령은 미리 테스트해두는 것이 좋습니다.

mkdir -p /backup/mysql
mysqldump -u root -p --single-transaction --routines --triggers app_db > /backup/mysql/app_db.sql

전체 DB를 백업하려면 다음과 같이 실행할 수 있습니다.

mysqldump -u root -p --single-transaction --routines --triggers --all-databases > /backup/mysql/all-databases.sql

--single-transaction 옵션은 InnoDB 테이블 백업 시 서비스 중단을 줄이는 데 유용합니다. 다만 MyISAM 테이블이 섞여 있거나 대용량 DB인 경우에는 별도 백업 전략을 검토해야 합니다.


19. 자주 발생하는 문제

1) Repository에서 패키지를 찾지 못하는 경우

Repository 주소가 현재 OS 버전과 맞지 않거나, mirror 주소가 일시적으로 응답하지 않는 경우입니다. dnf clean all, dnf makecache를 실행하고 공식 Repository 페이지에서 baseurl을 다시 확인합니다.

dnf clean all
dnf makecache

2) MariaDB 서비스가 시작되지 않는 경우

설정 파일 문법 오류, datadir 권한 문제, 포트 충돌 등이 원인일 수 있습니다. systemd 로그를 확인합니다.

systemctl status mariadb
journalctl -u mariadb -xe

3) PHP에서 접속이 되지 않는 경우

DB 계정 host, 비밀번호, database 이름, PHP 확장 설치 여부를 확인합니다.

php -m | grep -i pdo
php -m | grep -i mysql

pdo_mysql 또는 mysqli 관련 확장이 표시되어야 합니다.

4) 외부 접속이 되지 않는 경우

bind-address, 방화벽, DB 계정의 host 제한, 클라우드 보안그룹을 모두 확인해야 합니다. DB 외부 접속 문제는 한 가지 설정만으로 해결되지 않는 경우가 많습니다.


20. 설치 요약

전체 설치 과정을 요약하면 다음과 같습니다.

# Repository 생성
vi /etc/yum.repos.d/MariaDB.repo

# 캐시 갱신
dnf clean all
dnf makecache

# 설치
dnf install -y MariaDB-server MariaDB-client

# 서비스 시작 및 등록
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb

# 초기 보안 설정
mariadb-secure-installation

# 접속 확인
mariadb -u root -p

마무리

이번 글에서는 RockyLinux 10에서 MariaDB 11.8을 설치하고 기본 운영 환경을 구성하는 과정을 정리했습니다. MariaDB는 단순히 설치만 하면 끝나는 구성 요소가 아니라, 계정 권한, 문자셋, 외부 접속 제한, 백업, 로그, 메모리 설정까지 함께 관리해야 하는 핵심 인프라입니다.

신규 PHP 서버를 구축한다면 MariaDB 설치 직후에 반드시 애플리케이션 전용 DB 계정을 만들고, root 원격 접속을 제한하며, 백업 명령까지 테스트해두는 것이 좋습니다. 서비스가 실제 운영에 들어간 뒤 DB 문제가 발생하면 복구 비용이 크기 때문에, 초기 구축 단계에서 기본 운영 정책을 잡아두는 것이 중요합니다.

다음 글에서는 PHP 프로젝트에서 Oracle 데이터베이스와 연동해야 하는 경우를 위해 Oracle Instant Client 설치와 PHP OCI8 연동 과정을 정리합니다.