본문 바로가기

⭐ AWS/RDS

데이터베이스(my-sql) timeout 설정하기

커넥션 관련 문제가 발생하는 경우가 종종있다.

그 경우 데이터베이스 타임아웃이 많아서 변경해보도록하자

 pi@raspberrypi :~ $  sudo mysql -uroot

 MariaDB [(none)]> show variables like '%timeout';

 

+----------------------------------------+----------+

| Variable_name                             | Value     |

+----------------------------------------+----------+

| connect_timeout                          | 10         |

| delayed_insert_timeout                  | 300       |

| innodb_flush_log_at_timeout           | 1          |

| innodb_lock_wait_timeout               | 50        |

| innodb_rollback_on_timeout            | OFF      |

| interactive_timeout                       | 28800    |

| lock_wait_timeout                        | 31536000 |

| net_read_timeout                         | 30         |

| net_write_timeout                        | 60         |

| slave_net_timeout                        | 3600      |

| thread_pool_idle_timeout              | 60         |

| wait_timeout                              | 28800     |

+---------------------------------------+-----------+

 

1. sudo mysql -uroot (DB 접속) 

2. show variables like '%timeout'; (설정 변수들을 나타낸다)

각각 의미를 살펴보도록하자.

 

connect_timeout : 서버 접속시에 접속실패 메세지를 보내기까지 대기하는 시간.

delayed_insert_timeout : insert시 delay될 경우 대기하는 시간.

innodb_lock_wait_timeout : innodb에 transaction 처리중 lock이 걸렸을 시 롤백 될때까지 대기하는 시간. innodb는 자동으로 데드락을 검색해서 롤백시킨다.

innodb_rollback_on_timeout : innodb의 마지막 구문을 롤백시킬지 결정하는 파라미터. timeout은 진행중인 transaction을 중단하고 전체 transaction을 롤백하는 과정에서 발생한다.

interactive_timeout : 활동중인 커넥션이 닫히기 전까지 서버가 대기하는 시간.

net_read_timeout : 서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간.

net_write_timeout : 서버가 클라이언트에 데이터를 쓰는 것을 중단하기까지 대기하는 시간.

slave_net_timeout : 마스터/슬레이브로 서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간.

table_lock_wait_timeout : 테이블 락을 중단하기까지 대기하는 시간.

wait_timeout : 활동하지 않는 커넥션을 끊을때까지 서버가 대기하는 시간 파라미터를 설정할 수 있는 방법은 두가지가 있다.

첫번째, 커맨드라인 명령어를 통해 해당 파라미터 설정하기

 

 MariaDB [(none)]> set globnractive_timeout = [설정값]

 MariaDB [(none)]> set global wait_timeout = [설정값]

 MariaDB [(none)]> set session interactive_timeout = [설정값]

 MariaDB [(none)]> set session wait_timeout = [설정값]

 

단, 첫번째 방법은 서버를 중지 후 재시작시에는 다시 원래대로 돌아간다.

 

두번째, my.cnf에서 설정하기

MariaDB에서는 my.cnf가 아닌 50-server.cnf에서 설정을 해줘야한다.

 

 pi@raspberrypi :~ $  sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

 [mysqld]

 interactive_timeout = [설정값]

 wait_timeout = [설정값]

 

 pi@raspberrypi :~ $  sudo service mysql restart 

 

[mysqld] 안에다가

 

interactive_timeout = [설정값] //31536000 으로 설정하였습니다.
wait_timeout = [설정값] //31536000 으로 설정하였습니다.

 

저장을하고 서버를 재시작하면 변경되어있습니다.