
source filename.sql
mysql -u username -p <database> < </path/filename.sql>
mysqldump -u username -p dbname > backup.sql # 특정 db 백업
mysqldump -u username -p --all-databases > backup.sql # 모든 db 백업
위 방식으로 백업 후 RDS에서 실행했을 때 에러가 발생하는 경우가 있다.
인코딩 문제로 보이는데, 백업시 언어 설정을 기본값으로 설정했던 utf8mb4가 아닌 utf8로 설정해줘서 해결할 수 있었다.mysqldump -u username -p dbname --default-character-set utf8 > backup.sqlmysql에 접속할 때 인코딩을 설정하는 방법도 있다
mysql -u username -p --default -character-set utf8mb4
- AWS RDS의 데이터베이스를 백업할 때는 옵션을 추가해야 한다.
mysqldump --set-gtid-purged=OFF -h hostname -P port -u username -p dbname > backup.sql
mysqldump -u username -p dbname tablename > backup.sql
mysqldump -d -u username -p dbname tablename > backup.sql
pip install mysql-connector-python
import mysql.connector
mydb = mysql.connector.connect(
host = "<hostname>",
port = <port>, # local 연결시 생략
user = "<username>",
password = "<password>",
database = "<databasename>" # 생략시 DB선택 없이 mysql 접속
)
cur = mydb.cursor()
cur.excute("<query>")
sql = open("<filename>.sql").read
cur.excute(sql)
TMI
open("file") 자체는 특수 클래스(_io.TextIOWrapper)로, 뒤에 .read()를 써줘야 안의 내용을 변수에 담을 수 있다.
remote = mysql.connector.connect(
host="<hostname>",
port = <port>,
user = "<username>",
password = "<password>",
database = "<databasename>"
)
cur = remote.cursor()
sql = open("test04.sql").read()
for result_iterator in cur.execute(sql, multi=True):
if result_iterator.with_rows:
print(result_iterator.fetchall())
else:
print(result_iterator.statement)
remote.commit()
remote.close()
TMI
- cur.excute(sql)에서 sql이 단문인 경우, return값이 없이 실행만 되는 메서드이다.(print문 안에 있더라도 쿼리는 실행된다)
- 하지만 sql이 복문(여러 쿼리 포함)이라면, generator 객체를 return한다.
TMI2
- 여러 sql문을 한꺼번에 execute할 때 executemany()를 쓸 수 있다.
cur = remote.cursor(buffered=True)
sql = "INSERT INTO police_station VALUES (%s, %s)"
for i, row in df.iterrows():
cur.execute(sql, tuple(row))
print(tuple(row))
remote.commit()
TMI
- 강의에서는 tuple 형태로 넣었는데, list도 가능했다.
- executemany(query, data)를 쓰면 for문을 쓰지 않고 여러 데이터를 한번에 입력할 수 있다.
executemany()에 들어가는 데이터는 컨테이너 안에 컨테이너 형태로 들어가야 한다.
pandas df를 넣기 위해서는 자료형 변환이 필요하다.