Minha consulta MySQL continuará a ser executada mesmo que minha conexão ssh seja interrompida?

16

Eu me conectei a um servidor através de SSH e me conectei ao mysql, e pedi para ele executar uma consulta (cujos resultados são despejados em um CSV) que poderia levar mais de uma hora. Embora eu tenha instruído meu cliente para enviar pacotes nulos a cada 60 segundos para manter a sessão ativa, eu ainda estou paranóico a consulta / processo mysql poderia terminar, então minhas perguntas são:

  1. Uma sessão ssh cancelada (devido à inatividade) eliminará o processo de consulta do mysql?
  2. Como posso garantir que isso não aconteça - o pacote nulo é enviado a cada 60 segundos o suficiente?
por njp 20.12.2013 / 10:57

2 respostas

9

A maioria dos shells enviam SIGHUP para o grupo de processos em primeiro plano na saída (e, em alguns, processos em segundo plano também, no bash isso é controlado com a opção shell huponexit ), que pode causar a sua morte, dependendo de como O cliente mysql lida com isso.

Você pode executar seu comando prefixado com nohup para que ele seja reparado pelo init se o seu shell sair, independentemente de o seu shell enviar SIGHUP ou não (sendo reparado pelo init não está relacionado especificamente ao nohup - é apenas que tem sobrevivido a seu pai).

Possivelmente, uma solução mais palatável seria usar tmux , screen , dtach ou semelhante para executar o cliente abstraído do seu shell e terminal de controle. Dessa forma, se seu shell for desconectado, você simplesmente se reconectará à sessão em que estava executando a consulta.

Em geral, os pacotes keepalive não importam, a conexão não será terminada sem nenhum motivo. Uma preocupação mais premente seria a perda de conexão entre o cliente e o servidor por outros motivos (falha de rede, etc.).

    
por 20.12.2013 / 11:05
2

Eu comecei a executar screen sessões quando eu ssh em uma caixa, parcialmente para evitar que e como um bônus adicional, eu recebo várias abas, não posso vencê-lo. Se eu estiver desconectado por algum motivo, posso me conectar novamente à minha sessão de tela.

Atualizar

Para responder # 2, eu executaria mysql de dentro de um shell bash por meio de uma sessão de tela. Parece complicado, mas é só:

$: screen
$: mysql

Você pode editar seu arquivo ~ / .screenrc para adicionar legendas na parte inferior da sessão de tela para que você possa acompanhar suas guias, renomear suas guias, etc. Se você estiver desconectado, quando se reconectar, simplesmente execute

$: screen -d

e isso mostrará todas as sessões separadas. Para recolocar, basta executar algo como

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

Ou qualquer que seja o id da sessão de tela. Você está de volta onde você parou. Você deve executar screen -d como o mesmo usuário que iniciou a sessão de tela, apenas fyi ou root, é claro. Eu não tenho certeza porque depois que eu ssh eu sempre sudo su - então eu não tenho que sudo cada comando.

    
por 20.12.2013 / 14:45

Tags