MySQL Linux 클라이언트 시간 초과/연결 유지

MySQL Linux 클라이언트 시간 초과/연결 유지

Linux의 MySQL 클라이언트 명령줄에서 Keepalive를 설정하는 방법이 있습니까?

우리 네트워크는 최근 VLAN 설정으로 이동되었으며 시스템 부서는 더 이상 방화벽을 제어할 수 없습니다. 데이터가 통과하지 못하는 경우(연결 및 제한된 리소스를 추적해야 함) 30분 후에 모든 연결을 종료하도록 방화벽에 규칙을 설정하기로 결정한 권한. 나는 이것을 통제할 수 없습니다.

서버 관리자이자 프로그래머로서 내 문제는 이것이 프로그래밍하는 동안 백그라운드에서 mysql 명령줄 클라이언트를 실행할 수 없다는 것입니다. 쿼리를 보내지 않거나 데이터를 보내지 않고 35분 후에 시도하면 클라이언트는 더 이상 연결이 없음을 감지합니다. 매번 다시 연결해야 해요.

SSH에서는 하루 종일 연결을 열어둘 수 있도록 연결 유지를 설정할 수 있습니다. mysql 명령줄 클라이언트에 대해 유사한 구성 가능한 옵션이 있습니까? "Mysql Keepalive" 및 유사한 검색이 프로그래밍 언어의 백엔드 연결에 대한 결과를 반환하므로 아무 것도 찾을 수 없습니다.

답변1

일반 TCP 연결 유지를 설정할 수 있습니다. 이를 달성하기 위한 커널 설정이 있다고 생각합니다. 그러나 그 빈도는 일반적으로 훨씬 낮습니다(시간별). 하나 있다TCP 연결 유지 가이드자세한 내용이 들어 있는 것 같습니다.

또는 SSH를 통해 직접 MySQL 연결을 터널링한 다음 SSH 킵얼라이브를 사용하는 것은 어떨까요?

$ ssh -L1234:127.0.0.1:3306 -o ServerAliveInterval=300 user@mysql-server
... (in another terminal)
$ mysql -u user -p -h 127.0.0.1 -P 1234

세 번째 옵션은 서버에 대한 터널(예: OpenVPN)을 설정한 다음 연결 유지(및 투명하게 재연결 등)를 처리하는 것입니다.

추신: "우리의 귀중한 자원" 만료된 인수확립된30분 미만의 TCP 연결은 쓰레기입니다. 불행하게도 - 나도 이전에 그들의 입장에 있었던 적이 있습니다 - 일부 장비도 형편없었습니다. 예를 들어,BCP 142/RFC 5382~을 주다최저 한도에서2시간 4분(호스트가 아직 실행 중인지 방화벽이 확인할 수 없는 경우에만 해당)

답변2

세션 중에 연결이 끊어지면 MySQL CLI 클라이언트는 기본적으로 자동으로 연결됩니다. 문서:MySQL 팁&자동 재연결 동작 제어.

진정한 해결책은 권력을 가진 사람들과 협력하여 개발팀 구성원에게 적합한 솔루션을 찾는 것입니다.

물론 시간이 좀 걸리므로 임시 솔루션을 개발해야 할 수도 있습니다. MySQL의 자동 연결( --skip-reconnect)을 비활성화하고 재연결을 처리하기 위한 간단한 bash 스크립트를 생성하는 것이 좋습니다 . 이는 좋은 생각은 아니지만 도움이 될 수 있습니다.

#!/bin/bash

PROGRAM="/path/to/mysql"
ARGS="--skip-reconnect"

while [ 1 ]; do
 $PROGRAM $ARGS
 sleep 1
 echo -n "Lost Connection... Reconnect[Y]"
 read USER_INPUT
 case x$USER_INPUT in
  x)
   echo "Reconnecting..."
   ;;
  x[yY])
   echo "Reconnecting..."
   ;;
  *)
   echo "Stopping..."
   break
   ;;
 esac
done

답변3

당신은 그것을 사용할 수 있습니다libkeepalive미리 로드하면 호출을 libkeepalive.so가로채고 반환하기 전에 자동으로 소켓에서 선호하는 연결 유지 설정을 사용합니다.socket()setsockopt()

이것은 실제로아니요애플리케이션(이 경우 MySQL)을 다시 컴파일해야 하며 이는 완전히 투명합니다.

또한보십시오TCP 연결 유지 가이드.

관련 정보