Q. Lock wait timeout exceeded; try restarting transaction AWS RDS MySQL 에러 해결 방법은?
환경
AWS RDS
MySQL 8
pymysql
에러 발생 상황
컬럼 갯수가 10개 정도 되며, 그 중에 일부는 문서 단위 정보를 가진 데이터프레임의 데이터를 pymysql 라이브러리를 활용해 파이썬 언어로 AWS RDS에 구축한 MySQL에 insert 하는 상황.
데이터 타입이 medium text로 되어 있는, 즉 상당히 긴 텍스트를 연쇄적으로 insert query로 넣는 과정에서 중간에 에러가 발생했다.
에러 메세지
OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')
해결
구글 검색으로 해당 문제가 lock wait timeout 시간이 너무 오래 걸려서 생기는 문제일 가능성이 높다는 것을 알게 되었고, 관련 포스팅을 보고,innodb lock wait timeout 을 더 길게 설정해주려고 했으나, root 권한으로 mysql에 접속하는 것이 불가능하였다. 나중에 알게된 것은 AWS RDS는 data security 때문에 root 권한 접속이 안된다는 것.
해당 변수의 값 변경은 AWS 웹페이지에서 파라미터 그룹을 편집하여 해결 가능하다.
좌측 메뉴바에서 파리미터 그룹으로 들어가
새로운 파라미터 그룹을 생성하고
문제가 되었던 파라미터인 innodb_lock_wait_timeout을 검색한 다음, 오른쪽 파라미터 편집을 눌러 값을 변경해준다. 나의 경우는 원래 값이 50이었는데, 새롭게 10000으로 변경하여 저장한 상태이다.
편집을 완료한 다음에는 db를 다시 재부팅해야 파라미터 변경이 반영된다.
이렇게 수정한 다음에 문제없이 해당 입력이 가능했다.
참고: