에러그만!!!!!😠
이라고 외치고 싶었다...
어제부터 계속해서 오늘 점심까지는 계속해서 에러만 만나고 있었다...
이정도면 내 코드가 매우 문제가 있는것 같은데,
비교해 보면 강의의 예제 코드와 동일하다.
수많은 에러들 중 복잡했던 [SequelizeConnectionError]: Too many connections 에러에 대해 다뤄보려 한다.
🚌 상황
회원가입 기능 테스트 하면서 테이블에 데이터가 너무 많아져 보기 힘들었다.
시퀄라이즈 페이지에 가보니 delete 쿼리 메소드가 있어서
시도해 봤다.
조건 하나하나 귀찮게 하고 싶지 않아서
아래의 메소드로 진행했는데,
문제가 시작되었다.
🚨에러🚨
어떤 명령을 해도, 아래의 🚨에러🚨가 발생했다.
Executing (default): SELECT `id`, `name`, `email`, `password`, `createdAt`, `updatedAt` FROM `UsersData` AS `UsersData`;
스텍오버플로우에 검색해 보니,
config.json 파일에 "logging" : false 를 추가.
하라는 제안이 있어서 시도해 봤다.
다행이 바로 해당 에러는 사라졌다. !
그리고 다시 테이블을 보기 위해 create 요청 후 findeAll 메소드를 실행시켰다.
🚨에러🚨
throw new SequelizeErrors.ConnectionError(err); ConnectionError [SequelizeConnectionError]: Too many connections
테이블을 보려고 클릭해 봐도,
[Start] Executing MySQL query...
이 메세지만 떠있고, [Done] 처리가 되지 않았다.
왜 안되는 걸까. 연거푸 눌러봐도 작동하지 않았다.
그리고 갑자기 이 에러가 나타났다..
🤝 해결 방법 🤝
검색결과 wait_timeout과, interactive_timeout을 만지면 해결 되는듯 했다.
일단 sql에 접속을 해야했다.
mysql -u root -p
그리고 해당 값들을 볼수 있도록 아래 명령어를 입력했다.
show variables like "%max_connections%";
그럼 이렇게 나온다.
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| max_connections | 151 |
| mysqlx_max_connections | 100 |
+------------------------+-------+
- max_connections: 최대 접속수
- 기본값은 151이다!
이제 아래의 명령어를 터미널에 입력해 timeout 값을 봐보자.
show variables like '%timeout';
그럼 이렇게 나온다.
+-----------------------------------+----------+
| Variable_name | Value |
+-----------------------------------+----------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| have_statement_timeout | YES |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| mysqlx_connect_timeout | 30 |
| mysqlx_idle_worker_thread_timeout | 60 |
| mysqlx_interactive_timeout | 28800 |
| mysqlx_port_open_timeout | 0 |
| mysqlx_read_timeout | 30 |
| mysqlx_wait_timeout | 28800 |
| mysqlx_write_timeout | 60 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| replica_net_timeout | 60 |
| rpl_stop_replica_timeout | 31536000 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 60 |
| ssl_session_cache_timeout | 300 |
| wait_timeout | 28800 |
+-----------------------------------+----------+
뭔가가 매우 많고 복잡해 보이지만, 일단은 wait_timeout과, interactive_timeout 의 값에만 집중하기로 했다.
해보고 안되면 다시 보면 되니깐, 마음을 가라앉히고 다시 봤다.
해당 값을 바꿔주려면,
set interactive_timeout = 180;
set wait_timeout = 180;
이런식으로 바꿔주면 된다.
여기서 저 숫자는 초단위 시간 값이며,
시간을 짧게 해줘서, 안쓰는 애들, 필요없는 애들은 빠르게 해제시켜주는 역할을 해주기 위해
시간을 줄여 적어주었다.
그리고 혹시 몰라서 아래의 명령어로 한번더 입력해 주었다.
set global interactive_timeout = 180;
set global wait_timeout = 180;
그리고 나서 다시
show variables like '%timeout';
명령어를 통해 확인
혹시나 바뀌지 않았다면, 터미널에서
brew services restart mysql
명령어를 통해 재시작 한 뒤에 다시 시도해 보길 바란다.
그리고 다시 회원 가입요청 보내니까 해당 에러 해결 되었다.
참고한 블로그
https://velog.io/@kimjiwonpg98/mysql-too-many-connections-error-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95
https://sweetysnail1011.tistory.com/70
https://sys970717.tistory.com/13
'TIL' 카테고리의 다른 글
23/11/14 TIL __ 미들웨어로 로그인 인증하기 (access token) (0) | 2023.11.14 |
---|---|
23/11/13 TIL __ 시퀄라이저 관계 설정. (0) | 2023.11.13 |
23/11/11 TIL __ 시퀄라이저 메소드 오류 Cannot read properties of undefined (reading 'create') , create is not a function (0) | 2023.11.11 |
23/11/10 TIL __ 시퀄라이저 aws rds 테이블 만들기. (0) | 2023.11.10 |
23/11/09 TIL __ AWS RDS 와 DDL, DML, DCL, ORM + Sequelize (0) | 2023.11.09 |