운영 DB를 MariaDB 10.5에서 11.4로 버전업하면서 Replication(이중화)까지 구성한 과정을 정리합니다.
단순 버전업이 아니라, 새 서버에 11.4를 설치하고 기존 데이터를 마이그레이션한 뒤 Master-Replica 구조를 잡는 방식으로 진행했습니다.
전체 구성 흐름
[ 기존 Master (10.5) ]
| mysqldump
v
[ 신규 Master (11.4) ] <--> [ Replica (11.4) ]
^
EBS 마운트 + 설치
큰 흐름은 다음과 같습니다.
- 신규 서버에 EBS 볼륨 마운트
- MariaDB 11.4 설치 및 초기 설정
- 기존 DB에서 mysqldump로 데이터 이관
- Replica 서버 구성 및 CHANGE MASTER TO 설정
- 복제 상태 확인 및 튜닝
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/fstabMariaDB 데이터 디렉토리를 /data/mysql로 설정해서 OS 볼륨과 분리했습니다.

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.txt4. 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=524288CHANGE 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_Running | Yes |
| Slave_SQL_Running | Yes |
| Seconds_Behind_Master | 0 |
| Gtid_Slave_Pos | Master와 동일 |
5. systemd 서비스 설정
MariaDB를 systemd로 관리하도록 서비스 파일을 설정했습니다.
# /etc/systemd/system/mariadb.service.d/override.conf
[Service]
LimitNOFILE=65535
LimitNPROC=65535sudo 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 누락 같은 예상치 못한 이슈가 있었지만, 테스트 환경에서 충분히 검증한 뒤 운영에 반영해서 무사히 마무리할 수 있었습니다.