일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 불가피
- 폰폰테스트
- 김재석
- 최강욱
- 김영권
- 홍혜걸
- 조희연
- 은혜의 강 교회
- libtins
- 김영권 아내
- 성남은혜의강교회
- 성남 코로나 확진자
- 미국 금리인하
- 킹덤 고근희
- 리리남매
- 양적완화
- 제넥신
- 픽크루
- 이상형 만들기
- 해킹
- 이태원 클라쓰 15회 예고
- 고민정
- 임영규
- 학교 개학 연기 4월
- 스페인 코로나
- 이지혜
- 스콜피온킹
- 유튜버 김재석
- 금리인하
- 뭉쳐야 찬다
Archives
- Today
- Total
Dork's port
Python3 (SQL Alchemy) - MySQL server has gone away 에러 해결 본문
Database 서버를 교체하고 기존 코드를 돌려보니, 크롤링을 하던 도중 ERROR 2006 (HY000): MySQL server has gone away 에러가 심심찮게 발생했다.
그래서 해결법을 찾아보았고 잘 되는것 같아 공유한다.
원인으로는 DB 서버측, 클라이언트 측이 있을 수 있다.
# 서버 설정 |
보통 클라이언트에서 네트워킹이 장시간 없으면 서버 측에서 설정한 설정 값에 따라 연결을 끊거나, 서버에서 지정한 버퍼 (데이터 양)을 초과하면 서버에서 RST 패킷을 보내 연결을 끊는 것 같다.
대표적으로 관련된 설정 값은 아래와 같다.
connect_timeout
max_allowed_packet
net_buffer_length
max_allowed_packet
wait_timeout
mysql에서 설정을 바꾸기 위해서는 db에 접속하여 아래와 같이 명령어를 입력해주면 된다 (영구적으로 바꾸기 위해서는 ini 파일을 수정하여야 함).
mysql> SET GLOBAL max_allowed_packet=64*1024*1024;
# 클라이언트 설정 |
클라이언트로는 현재 파이썬의 SQL Alchemy를 이용하고 있으며, pymysql 모듈을 이용하여 접속하고 있다.
클라이언트에서 engine을 create할때 pool_pre_ping 옵션을 True로 추가해주면 된다.
아마도, 일정시간 연결이 없어도 ping (e.g., SELECT 1)을 보내서 연결을 유지하도록 하는 것 같다.
engine = db.create_engine('mysql+pymysql://{0}:{1}@{2}/{3}'.format(id,password,host,db_name), pool_pre_ping=True)
'Develop' 카테고리의 다른 글
error: invalid command 'bdist_wheel' 에러 (0) | 2020.12.04 |
---|---|
Pyhon Class 테스트 (0) | 2020.07.16 |
Python3 - SQLAlchemy 사용하기 (0) | 2020.02.26 |
TUN Interface의 패킷 캡처 중 앞에 헤더가 붙는 경우 (2) | 2019.07.29 |
Python에서 matplotlib이용 시 font type 변경하기 (2) | 2019.05.16 |
Comments