✅ 서비스 중지 없이 MySQL 대용량 데이터(80GB) 동기화하는 방법
2025. 3. 23. 08:58ㆍPYTHON
반응형
📌 rsync + binlog를 활용한 안전한 동기화
이 방법은 MySQL이 실행 중인 상태에서 데이터 파일을 복사한 후, binlog를 적용하여 최신 상태를 유지하는 방식입니다.
🔹 1️⃣ 1차 동기화 (rsync로 변경된 데이터 복사)
Python을 이용하여 MySQL 데이터를 백그라운드에서 변경된 파일만 복사합니다.
import subprocess
SOURCE_DIR = "/var/lib/mysql/"
TARGET_DIR = "/var/lib/mysql1/"
def run_command(command):
""" 시스템 명령 실행 """
try:
subprocess.run(command, shell=True, check=True)
print(f"✅ 실행 완료: {command}")
except subprocess.CalledProcessError as e:
print(f"❌ 실행 실패: {command}")
print(e)
def sync_mysql_data():
""" MySQL 변경된 데이터만 동기화 (파일 기반, IO 부하 감소) """
print(f"📌 {SOURCE_DIR} → {TARGET_DIR} 변경된 데이터 동기화 중...")
rsync_cmd = (
f"ionice -c2 -n7 rsync -av --update --progress --inplace "
f"--exclude='*.pid' --exclude='*.sock' {SOURCE_DIR} {TARGET_DIR}"
)
run_command(rsync_cmd)
def main():
sync_mysql_data()
if __name__ == "__main__":
main()
✔ 설명:
- rsync -av --update --progress --inplace → 변경된 파일만 복사
- --exclude='*.pid' --exclude='*.sock' → MySQL의 실행 관련 파일 제외 (오류 방지)
- 서비스 중지 없이 동기화 가능
🔹 2️⃣ binlog를 활용한 최신 데이터 동기화
MySQL의 **Binary Log (binlog)**를 사용하여 rsync 이후 변경된 데이터를 동기화합니다.
1️⃣ MySQL에서 binlog 활성화 확인
mysql -u root -p -e "SHOW VARIABLES LIKE 'log_bin';"
- ON이면 binlog 사용 가능
- 만약 OFF라면, /etc/mysql/my.cnf 또는 /etc/my.cnf에서 log_bin 활성화 후 재시작 필요
2️⃣ 현재 binlog 위치 저장 (마스터 서버)
mysql -u root -p -e "SHOW MASTER STATUS;"
+------------------+----------+
| File | Position |
+------------------+----------+
| mysql-bin.000034 | 5678921 |
+------------------+----------+
- File: mysql-bin.000034 (현재 binlog 파일)
- Position: 5678921 (현재 데이터 위치)
3️⃣ binlog 적용 (타겟 서버)
동기화 대상 서버에서 mysqlbinlog를 실행하여 최신 데이터를 반영합니다.
mysqlbinlog --host=원본서버_IP --raw --read-from-remote-server --stop-never --user=root --password=your_password /var/lib/mysql/mysql-bin.000034 | mysql -u root -p
✔ 설명:
- --raw --read-from-remote-server → 실시간으로 binlog 복사
- --stop-never → 지속적으로 binlog 반영 (실시간 동기화)
'PYTHON' 카테고리의 다른 글
일단위 DB백업진행 (0) | 2025.04.09 |
---|---|
📌 Doji(도지)란? (0) | 2025.04.01 |
[PYTHON]asyncio: 파이썬 비동기 프로그래밍 완벽 가이드 (0) | 2025.02.27 |
[PYTHON]나만의 차트 및 데이터 추출방법 (TSI/SMI) (8) (0) | 2025.01.10 |
[PYTHON]나만의 차트 및 데이터 추출방법 (MACD/TSI) (7) (0) | 2025.01.10 |