
백업과 복원
백업
현재의 데이터베이스를 다른 매체에 보관하는 작업이다.
복원
데이터베이스에 문제 발생 시 다른 매체에 백업된 데이터를 이용해 원상태로 돌려놓는 작업이다.
DBA(DataBase Administrator)가 해야 할 가장 중요한 일이 백업과 복원이다.
DB에 로그 남기기
DB를 핸들링하는 코드
import logging, datetime | |
import pymysql | |
import pymysql.cursors | |
class DatabaseHandler(logging.Handler): | |
def __init__(self): | |
logging.Handler.__init__(self) | |
self.conn = pymysql.connect( | |
user="user_name", password="user_password", host="localhost", database="logdb" | |
) | |
self.cur = self.conn.cursor(pymysql.cursors.DictCursor) | |
mk_table_query = """ | |
CREATE TABLE IF NOT EXISTS log ( | |
id INTEGER PRIMARY KEY AUTO_INCREMENT, | |
insertTime TEXT, | |
logLv TEXT, | |
filename TEXT, | |
lineno INTEGER, | |
message TEXT | |
) | |
""" | |
self.cur.execute(mk_table_query) | |
self.conn.commit() | |
def time_format(self, record): | |
self.now = datetime.datetime.now() | |
record.nowstr = self.now.strftime("%Y-%m-%d %H:%M:%S") | |
def emit(self, record): | |
self.format(record) | |
self.time_format(record) | |
insert_db_query = """ | |
INSERT INTO log ( | |
insertTime, logLv, filename, lineno, message) VALUES | |
('{}', '{}', '{}', {}, '{}') | |
""".format( | |
record.nowstr, | |
record.levelname, | |
record.filename, | |
record.lineno, | |
record.message, | |
) | |
self.cur.execute(insert_db_query) | |
self.conn.commit() | |
def __del__(self): | |
try: | |
self.conn.close() | |
except: | |
pass |
코드 설명
__init__()
데이터베이스에 연결하고 테이블을 만드는 함수
pymysql.connect() |
pymysql.connect() 메서드를 사용하여 mySQL에 연결한다.
이 때, 호스트명, 포트, 로그인, 암호, 접속할 DB 등을 파라미터로 지정할 수 있다.
conn.cursor() |
커넥션 객체를 통해 데이터베이스에서 SQL문을 대신 실행해주고 결과를 반환해줄 커서 객체를 생성한다.
커서 객체를 생성하는 이유는 커서 객체에 DB 작업을 위한 함수들이 포함되어 있기 때문이다.
cur.execute() |
SQL 문장을 실행한다.
인자로는 SQL문이 들어오게 된다.
conn.commit() |
앞에서 입력한 데이터는 아직 트랜잭션 이후 완전히 저장되지 않았기 때문에 커밋을 통해 입력한 데이터를 저장한다.
time_format()
레코드의 시간을 형식화한다.
record.nowstr에 현재 시간을 형식에 맞는 문자열로 저장한다.
emit()
로그 레코드를 받아서 데이터베이스에 기록한다.
.format() |
로그 메시지를 포맷한다.
.time_format() |
시간을 형식화한다.
__del__()
객체가 소멸될 때 호출되고, 데이터베이스 연결을 닫는다.
로그를 기록하고, 데이터베이스에 저장하는 코드
from log.loggdbmysql import DatabaseHandler | |
import logging | |
if __name__ == "__main__": | |
logger = logging.getLogger("testdb") | |
logger.setLevel(logging.DEBUG) | |
mysqlHandler = DatabaseHandler() | |
logger.addHandler(mysqlHandler) | |
logger.debug("디버깅") | |
logger.info("잘됨") | |
logger.warning("경고") | |
logger.critical("심각") |
코드 설명
__main__
.getLogger() |
인자로 된 이름을 가진 로거를 가져온다.
.setLevel() |
인자의 레벨 이상의 로그를 기록하도록 설정한다.
DatabaseHandler() |
인스턴스를 생성하고 이를 로거에 추가한다.
로그 메시지가 발생할 때마다 핸들러를 통해 데이터베이스에 저장된다.
'SKN Family AI Camp > MySQL' 카테고리의 다른 글
SQL(1) (0) | 2024.05.20 |
---|