[python] 데이터베이스 복제와 파이썬의 연동

데이터베이스 복제는 중요한 작업입니다. 이를 통해 데이터의 안전한 보관과 백업을 할 수 있습니다. 이번 포스트에서는 데이터베이스 복제를 파이썬과 연동하는 방법에 대해 알아보겠습니다.

1. 데이터베이스 복제란?

데이터베이스 복제는 마스터 데이터베이스에서 변경된 데이터를 하나 이상의 슬레이브 데이터베이스로 복제하는 과정을 말합니다. 이를 통해 슬레이브 데이터베이스는 항상 마스터 데이터베이스와 동기화된 상태를 유지할 수 있습니다.

2. 파이썬과 데이터베이스 연동

파이썬은 데이터베이스와의 연동이 용이한 언어입니다. 다양한 데이터베이스 관련 모듈이 있으며, 이를 활용하여 데이터베이스에 접속하고 데이터를 조작할 수 있습니다.

여기서는 MySQL 데이터베이스와의 연동을 예시로 들어보겠습니다. 먼저, mysql-connector-python 모듈을 설치해야 합니다.

pip install mysql-connector-python

다음은 파이썬에서 MySQL 데이터베이스에 접속하는 간단한 예제입니다.

import mysql.connector

# 데이터베이스 접속 정보
config = {
  'user': '사용자명',
  'password': '비밀번호',
  'host': '호스트명',
  'database': '데이터베이스명',
  'raise_on_warnings': True
}

# 데이터베이스 접속
cnx = mysql.connector.connect(**config)

# 커서 생성
cursor = cnx.cursor()

# 쿼리 실행
query = "SELECT * FROM 테이블명"
cursor.execute(query)

# 결과 가져오기
result = cursor.fetchall()
for row in result:
  print(row)

# 접속 종료
cursor.close()
cnx.close()

위 예제에서는 mysql.connector 모듈을 사용하여 MySQL 데이터베이스에 접속하고, cursor 객체를 생성하여 쿼리를 실행하고 결과를 가져오는 방법을 보여줍니다.

3. 데이터베이스 복제와의 연동

데이터베이스 복제는 데이터의 신뢰성과 가용성을 높이는 중요한 작업입니다. 데이터베이스 복제를 구현하기 위해서는 데이터베이스의 설정과 파이썬 코드를 함께 수정해야 합니다.

여기서는 MySQL 데이터베이스에서의 복제를 예시로 들어보겠습니다. MySQL에서는 binlog을 사용하여 데이터베이스의 변경 내역을 기록합니다. 이를 활용하여 파이썬 스크립트를 작성하면 마스터 데이터베이스에서 변경된 데이터를 실시간으로 슬레이브에 복제할 수 있습니다.

import mysql.connector
import time

# 데이터베이스 접속 정보
master_config = {
  'user': '마스터_사용자명',
  'password': '마스터_비밀번호',
  'host': '마스터_호스트명',
  'database': '마스터_데이터베이스명',
  'raise_on_warnings': True
}

# 슬레이브 데이터베이스 접속 정보
slave_config = {
  'user': '슬레이브_사용자명',
  'password': '슬레이브_비밀번호',
  'host': '슬레이브_호스트명',
  'database': '슬레이브_데이터베이스명',
  'raise_on_warnings': True
}

def replicate(master_config, slave_config):
    # 마스터 데이터베이스 접속
    master_cnx = mysql.connector.connect(**master_config)
    master_cursor = master_cnx.cursor()

    # 슬레이브 데이터베이스 접속
    slave_cnx = mysql.connector.connect(**slave_config)
    slave_cursor = slave_cnx.cursor()

    # 마스터 데이터베이스의 변경 내역을 슬레이브에 복제
    query = "SHOW MASTER STATUS"
    master_cursor.execute(query)
    result = master_cursor.fetchone()

    binlog_file = result[0]
    binlog_pos = result[1]

    query = "CHANGE MASTER TO \
            MASTER_HOST='마스터_호스트명', \
            MASTER_USER='마스터_사용자명', \
            MASTER_PASSWORD='마스터_비밀번호', \
            MASTER_LOG_FILE='{}', \
            MASTER_LOG_POS={};".format(binlog_file, binlog_pos)
    slave_cursor.execute(query)

    query = "START SLAVE;"
    slave_cursor.execute(query)

    # 슬레이브 데이터베이스의 변경 내역을 확인
    while True:
        query = "SHOW SLAVE STATUS"
        slave_cursor.execute(query)
        result = slave_cursor.fetchone()

        if result[9] == "Yes":
            print("슬레이브 데이터베이스 복제 완료")
            break

        time.sleep(1)

    # 접속 종료
    master_cursor.close()
    master_cnx.close()
    slave_cursor.close()
    slave_cnx.close()

# 데이터베이스 복제 실행
replicate(master_config, slave_config)

위 예제에서는 mysql.connector 모듈을 사용하여 마스터 데이터베이스와 슬레이브 데이터베이스에 접속합니다. SHOW MASTER STATUS 쿼리를 통해 마스터 데이터베이스의 변경 내역을 가져와 CHANGE MASTER TO 쿼리를 실행하여 슬레이브 데이터베이스에 복제 설정을 추가합니다. 그 후 START SLAVE 쿼리를 실행하여 슬레이브 데이터베이스의 복제를 시작합니다.

마무리

이번 포스트에서는 데이터베이스 복제와 파이썬의 연동에 대해 알아보았습니다. 파이썬을 통해 데이터베이스에 접속하고 데이터를 조작하는 방법부터 데이터베이스 복제까지 다양한 기능을 구현할 수 있습니다. 데이터베이스 복제는 중요한 작업이므로 신중하게 구현해야 합니다. 참고 자료는 아래에 제공되니 참고하시기 바랍니다.

참고 자료