[sql] aws rds, python with mysql

svenskpotatis·2023년 9월 27일
0
post-thumbnail

📌 AWS RDS (Amazon Relational Database Service)

  • AWS 에서 제공하는 관계형 데이터베이스
  • Cloud 상에 Database를 구축

📌 SQL File

Document % mkdir sql_ws
Document % cd sql_ws
  • 현재 폴더를 VSCode로 열기
sql_ws % code .

SQL File 실행 1

  • sql_ws 폴더에서 zerobase 접속
sql_ws % mysql -u root -p zerobase
mysql> source test01.sql

SQL File 실행 2 - 외부에서 바로 실행

Database에 접속하면서 SQL File 실행

% mysql -u username -p <database> < </path/filename.sql>
sql_ws % mysql -u root -p zerobase < test02.sql

☁️ Database Backup

SQL File 로 Database 백업

# 특정 Database Backup
% mysqldump -u username -p dbname > backup.sql   

# 모든 Database Backup
% mysqldump -u username -p --all-databases > backup.sql 
% mysqldump -u root -p zerobase > zerobase.sql
  • AWS RDS DATABASE
% mysqldump --set-gtid-purged=OFF -h <hostname> -P <port> -u <username> -p <databasename> > <filename>.sql
% mysqldump --set-gtid-purged=OFF -h <hostname> -P 3306 -u root -p zerobase > zerobase.sql

☁️ Database Restore

데이터베이스를 백업한 SQL File 을 실행하여 그 시점으로 복구하거나 이전

  • AWS RDS (database-1) 서비스가 사용 가능한 상태에서 접속
sql_ws % mysql -h 엔드포인트 -P 3306 -u admin -p
  • AWS RDS (database-1) 의 zerobase Database 를 복원
mysql> source zerobase.sql

☁️ Table Backup

sql_ws % mysqldump -u username -p dbname tablename > backup.sql
sql_ws % mysqldump -u root -p zerobase celab > celab.sql

☁️ Table Schema Backup

데이터 제외하고 테이블 생성 쿼리만 백업

# 특정 table schema
% mysqldump -d -u username -p dbname tablename > backup.sql

# 모든 table schema
% mysqldump -d -u username -p dbname > backup.sql

📌 Python with MySQL

pip install mysql-connector-python
import mysql.connector

📖 Create Connection

mydb = mysql.connector.connect(
	host = "<hostname>",
    user = "<username>",
    password = "<password>"
)

mydb.close()
  • Local Database 연결
local = mysql.connector.connect(
	host = "localhost",
    user = "root",
    password = "*********"
)

local.close()
  • AWS RDS (database-1) 연결
remote = mysql.connector.connect(
	host = "엔드포인트",
    port = 3306
    user = "admin",
    password = "*********"
)

remote.close()

특정 Database

mydb = mysql.connector.connect(
	host = "<hostname>",
    port = <port>,
    user = "<username>",
    password = "<password>",
    database = "<databasename>"
)

📖 Execute SQL

Query 실행

import mysql.connector

mydb = mysql.connector.connect(
	host = "<hostname>",
    user = "<username>",
    password = "<password>",
    database = "<databasename>"
)

mycursor = mydb.cursor()
mycursor.execute(<query>);
  • 예제1 - table 생성
remote = mysql.connector.connect(
	host = "엔드포인트",
    port = 3306,
    user = "admin",
    password = "*********",
    database = "zerobase"
)

cur = remote.cursor()
cur.execute("CREATE TABLE sql_file (id int, filename varchar(16))")

remote.close()

SQL File 실행

mydb = mysql.connector.connect(
	host = "<hostname>",
    user = "<username>",
    password = "<password>",
    database = "<databasename>"
)

mycursor = mydb.cursor()

sql = open("<filename>.sql").read()
mycursor.execute(sql)
  • Query 여러 개
sql = open("<filename>.sql").read()
result = mycursor.execute(sql, multi=True)
  • 예제

📖 Fetch All

mycursor.execute(<query>)

result = mycursor.fetchall()
for data in result:
	print(data)
  • 예제

📌 Python with CSV

  • 읽어올 양이 많은 경우 cursor 생성 시 buffer 설정
cursor = conn.cursor(buffered=True)

📚 INSERT문 -> 데이터 입력

sql = "INSERT INTO police_station values (%s, %s)"
  • 데이터 입력
  • commit(): 데이터베이스에 적용
  • 결과 확인
  • encoding: euc-kr / utf-8

0개의 댓글