반응형
쿼리 중에 MySQL 서버에 대한 연결 끊김' 오류가 자주 발생하는 이유(시간 초과 발생, 쿼리 전 ping)
저는 실험을 만들고 있는데, 서버 쪽이 mysql 서버(localhost에 있음)에서 쿼리를 실행하는 libuv 기반 C/C++ 애플리케이션입니다.
대부분의 경우 그냥 작동하지만 프로세스의 다양한 위치에서 '쿼리 중 MySQL 서버에 대한 연결 끊김' 메시지가 나타날 수 있습니다.
저는 모든 제한 시간을 늘리려고 노력했습니다.그러나 서버에 요청이 쇄도하면(매초와 마찬가지로) 동일한 오류가 발생합니다.
+-------------------------------------+----------+
| Variable_name | Value |
+-------------------------------------+----------+
| connect_timeout | 31536000 |
| deadlock_timeout_long | 50000000 |
| deadlock_timeout_short | 10000 |
| delayed_insert_timeout | 300 |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_print_lock_wait_timeout_info | OFF |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 31536000 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 31536000 |
| net_write_timeout | 31536000 |
| slave_net_timeout | 31536000 |
| thread_pool_idle_timeout | 60 |
| wait_timeout | 31536000 |
+-------------------------------------+----------+
나는 질의를 하기 전에 서버에 ping을 하고 있습니다.
// this->con was set up somewhere before, just like down below in the retry section
char query[] = "SELECT * FROM data WHERE id = 12;";
mysql_ping(this->con);
if(!mysql_query(this->con, query)) {
// OK
return 0;
} else {
// reconnect usually helps
// here I get the error message
mysql_close(this->con);
this->con = mysql_init(NULL);
if(mysql_real_connect(this->con, this->host.c_str(), this->user.c_str(), this->password.c_str(), this->db.c_str(), 0, NULL, 0) == NULL) {
// no DB, goodbye
exit(6);
}
// retry
if(!mysql_query(this->con, query)) {
return 0;
} else {
// DB fail
return 1;
}
}
다시 연결 옵션을 시도해 봤는데, 문제가 같습니다.
내가 알기로는 단일 스레드 libuv 및 mysql에서 이 흐름이 가능해야 합니다.
1. set up db connection
2. run event loop
-> make queries based on IO events, get results
3. event loop ends
4. db close
뭐가 그리울까요?
언급URL : https://stackoverflow.com/questions/57789935/why-lost-connection-to-mysql-server-during-query-errors-occur-time-to-time-ti
반응형
'programing' 카테고리의 다른 글
SmtpClient를 사용하여 C#을 통해 HTML 전자 메일 보내기 (0) | 2023.08.18 |
---|---|
MySQL JSON_MERGE / REPLACE.값을 실제로 업데이트하고 병합하지 않는 방법 (0) | 2023.08.13 |
Swift UI @ 바인딩 초기화 (0) | 2023.08.13 |
jQuery를 사용하여 Yes(예) 또는 No(아니오) 확인 상자 (0) | 2023.08.13 |
자바스크립트에서 window.navigate 또는 document.location을 사용해야 합니까? (0) | 2023.08.13 |