← 목록으로MariaDB

MariaDB 10.5에서 11.4 버전업 및 Replication 구성기

운영 환경에서 MariaDB 10.5를 11.4로 버전업하고 Master-Replica 이중화를 구성한 전체 과정 정리

MariaDBDatabaseReplicationMigration
2025-06-10

운영 DB를 MariaDB 10.5에서 11.4로 버전업하면서 Replication(이중화)까지 구성한 과정을 정리합니다.

단순 버전업이 아니라, 새 서버에 11.4를 설치하고 기존 데이터를 마이그레이션한 뒤 Master-Replica 구조를 잡는 방식으로 진행했습니다.


전체 구성 흐름

[ 기존 Master (10.5) ]
        |  mysqldump
        v
[ 신규 Master (11.4) ]  <-->  [ Replica (11.4) ]
        ^
   EBS 마운트 + 설치

큰 흐름은 다음과 같습니다.

  1. 신규 서버에 EBS 볼륨 마운트
  2. MariaDB 11.4 설치 및 초기 설정
  3. 기존 DB에서 mysqldump로 데이터 이관
  4. Replica 서버 구성 및 CHANGE MASTER TO 설정
  5. 복제 상태 확인 및 튜닝

1. EBS 볼륨 마운트

신규 서버에 데이터용 EBS 볼륨을 별도로 붙여서 /data 경로에 마운트했습니다.

# 디스크 확인
lsblk
 
# 파일시스템 생성 (새 볼륨인 경우)
sudo mkfs.xfs /dev/xvdf
 
# 마운트 포인트 생성 및 마운트
sudo mkdir -p /data
sudo mount /dev/xvdf /data
 
# fstab에 영구 마운트 등록
echo '/dev/xvdf /data xfs defaults,nofail 0 2' | sudo tee -a /etc/fstab

MariaDB 데이터 디렉토리를 /data/mysql로 설정해서 OS 볼륨과 분리했습니다.

EBS 마운트 확인


2. MariaDB 11.4 설치

# MariaDB 공식 레포 추가
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version="mariadb-11.4"
 
# 설치
sudo yum install MariaDB-server MariaDB-client -y

주요 설정 (my.cnf)

[mysqld]
datadir=/data/mysql
port=[db-port]
bind-address=0.0.0.0
 
# Replication 설정 (Master)
server-id=1
log-bin=mysql-bin
binlog-format=ROW
log-slave-updates=ON
gtid_strict_mode=ON
 
# 성능 관련
innodb_buffer_pool_size=4G
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=1
sync_binlog=1
 
# 문자셋
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

server-id는 Master와 Replica가 반드시 달라야 합니다. Master=1, Replica=2로 설정했습니다.


3. 데이터 마이그레이션

기존 10.5 서버에서 mysqldump로 데이터를 추출하고 신규 11.4 서버로 이관했습니다.

# 기존 서버에서 덤프 (테이블 단위)
mysqldump -h [source-ip] -u [user] -p \
  --single-transaction \
  --routines --triggers --events \
  --databases [db-name] > dump.sql
 
# 신규 서버에서 import
mysql -u root -p < dump.sql

시퀀스 마이그레이션

MariaDB 10.5에서 11.4로 넘어가면서 시퀀스 처리 방식이 약간 달라졌습니다. 일반 테이블 덤프로는 시퀀스가 제대로 이관되지 않아서 별도 스크립트로 처리했습니다.

# 시퀀스 목록 추출
mysql -h [source-ip] -u [user] -p -e \
  "SELECT TABLE_NAME FROM information_schema.TABLES \
   WHERE TABLE_SCHEMA='[db-name]' AND TABLE_TYPE='SEQUENCE';" \
  --skip-column-names > sequences.txt
 
# 시퀀스별 현재값 확인 후 신규 서버에 생성
while read seq; do
  val=$(mysql -h [source-ip] -u [user] -p -e "SELECT NEXTVAL($seq);" --skip-column-names)
  mysql -u root -p -e "CREATE SEQUENCE IF NOT EXISTS [db-name].$seq START WITH $val;"
done < sequences.txt

4. Replica 서버 구성

Replica 서버도 동일하게 MariaDB 11.4를 설치하고, Master와 연결합니다.

Replica my.cnf 핵심 설정

[mysqld]
server-id=2
relay-log=relay-bin
read-only=ON
log-slave-updates=ON
gtid_strict_mode=ON
 
# 병렬 복제
slave_parallel_threads=4
slave_parallel_mode=optimistic
slave_parallel_max_queued=524288

CHANGE MASTER TO 설정

CHANGE MASTER TO
  MASTER_HOST='[master-ip]',
  MASTER_PORT=[db-port],
  MASTER_USER='[repl-user]',
  MASTER_PASSWORD='[repl-password]',
  MASTER_USE_GTID=slave_pos;
 
START SLAVE;

복제 상태 확인

SHOW SLAVE STATUS\G

확인해야 할 핵심 항목:

항목정상값
Slave_IO_RunningYes
Slave_SQL_RunningYes
Seconds_Behind_Master0
Gtid_Slave_PosMaster와 동일

5. systemd 서비스 설정

MariaDB를 systemd로 관리하도록 서비스 파일을 설정했습니다.

# /etc/systemd/system/mariadb.service.d/override.conf
[Service]
LimitNOFILE=65535
LimitNPROC=65535
sudo systemctl daemon-reload
sudo systemctl enable mariadb
sudo systemctl start mariadb

트러블슈팅

binlog index 파일 누락

버전업 후 MariaDB가 시작되지 않는 문제가 발생했습니다. 로그를 확인하니 binlog index 파일이 없어서 발생한 문제였습니다.

[ERROR] Failed to open the relay log index file

해결:

# binlog index 파일 수동 생성
sudo touch /data/mysql/mysql-bin.index
sudo chown mysql:mysql /data/mysql/mysql-bin.index
sudo systemctl restart mariadb

포트 충돌

기존 10.5와 신규 11.4를 같은 서버에서 테스트할 때 포트 충돌이 발생했습니다. 테스트 시에는 다른 포트를 사용하도록 설정했습니다.

# 테스트용 11.4 인스턴스
[mysqld]
port=[test-db-port]
socket=/tmp/mysql-11.4.sock
datadir=/data/mysql-11.4

마무리

MariaDB 10.5에서 11.4로의 버전업과 Replication 구성을 운영 환경에 적용했습니다. 시퀀스 마이그레이션이나 binlog index 누락 같은 예상치 못한 이슈가 있었지만, 테스트 환경에서 충분히 검증한 뒤 운영에 반영해서 무사히 마무리할 수 있었습니다.