내 ssh 연결이 끊어 지더라도 MySQL 쿼리가 계속 실행됩니까?


16

SSH를 통해 서버에 연결하고 mysql에 로그인하여 한 시간 이상 걸릴 수있는 쿼리 (결과가 CSV로 덤프 됨)를 실행하도록 요청했습니다. 세션을 활성 상태로 유지하기 위해 60 초마다 null 패킷을 보내도록 클라이언트에 지시했지만 여전히 mysql 쿼리 / 프로세스가 종료 될 수 있다는 편집증이므로 내 질문은 다음과 같습니다.

  1. 취소 된 ssh 세션 (비 활동으로 인해)이 mysql 쿼리 프로세스를 종료합니까?
  2. 널 패킷이 60 초마다 충분히 전송됩니까?

답변:


9

대부분의 쉘은 종료시 포 그라운드 프로세스 그룹으로 SIGHUP을 보내고 (그리고 일부 백그라운드 프로세스도 bash에서는 쉘 옵션으로 제어됩니다 huponexit) mysql 클라이언트가 처리하는 방식에 따라 죽을 수 있습니다.

nohup쉘이 SIGHUP을 전송하는지 여부에 관계없이 쉘이 종료되면 init에 의해 reparented 명령을 실행할 수 있습니다 (init에 의해 reparented되는 것은 nohup과 관련이 없습니다-그것은 단지 부모보다 오래되었습니다).

아마도 더 맛이 솔루션을 사용하는 것 tmux, screen, dtach또는 클라이언트를 실행할 유사한 쉘 및 터미널 제어에서 멀리 추상화. 이렇게하면 셸 연결이 끊어지면 쿼리를 실행중인 세션에 다시 연결하기 만하면됩니다.

일반적으로 keepalive 패킷은 중요하지 않으며 연결은 아무 이유없이 종료되지 않습니다. 더 시급한 문제는 다른 이유로 (네트워크 장애 등) 클라이언트와 서버 간의 연결이 끊어지는 것입니다.


감사합니다! 명확히하기 위해 mysql 내에서 실제 쿼리를 실행하고 있습니다 .mysql nohup에 로그인 할 때 추가 하는 한 쿼리가 내부에서 실행됩니까?
njp dec

1
@njp 대화식으로 실행 nohup하려면 mysql REPL이 터미널에 연결되지 않으므로 많이 사용하지 않을 것입니다. 위에서 언급 한 멀티플렉서 (또는 dtach) 중 하나를 대신 사용해보십시오. 아마도 필요에 더 잘 맞을 것입니다.
Chris Down

2

나는 실행 시작했습니다 screen나는 상자에 ssh를 할 때 부분적 것을 방지하기 위해, 세션 추가 보너스로, 나는 여러 개의 탭을 얻을, 그것을 이길 수 없습니다. 어떤 이유로 연결이 끊어지면 화면 세션에 다시 연결할 수 있습니다.

최신 정보

# 2에 대답하기 mysql위해 bash 쉘 내에서 스크린 세션을 통해 실행 합니다. 복잡하게 들리지만, 그냥 :

$: screen
$: mysql

~ / .screenrc 파일을 편집하여 화면 세션의 맨 아래에 캡션을 추가하여 탭을 추적하고 탭의 이름을 바꾸는 등의 작업을 수행 할 수 있습니다. 연결이 끊긴 경우 다시 연결하면 간단히

$: screen -d

분리 된 세션이 표시됩니다. 다시 연결하려면 다음과 같이 실행하십시오.

$: screen -r 551.pts-0.git

또는 스크린 세션의 ID가 무엇이든. 당신은 당신이 중단 한 곳으로 돌아 왔습니다. 당신은 실행해야 screen -d하지만 화면 세션을 시작 동일한 사용자 물론 단지 참고로, 또는 루트로. 나는 항상 ssh 한 후에 sudo su -모든 명령을 sudo 할 필요가 없기 때문에 확실 하지 않습니다.


1
사용하기위한 조언 screen은 적절하지만 OP에 의해 나열된 두 가지 질문에 직접 대답하지는 않습니다.
Barun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.