본문 바로가기

DATABASE

데이터베이스 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 global interactive_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 으로 설정하였습니다.


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