La mia query MySQL continuerà a funzionare anche se la mia connessione ssh si interrompe?


16

Mi sono collegato a un server tramite SSH e ho effettuato l'accesso a mysql e gli ho chiesto di eseguire una query (i cui risultati sono scaricati in un CSV) che potrebbe richiedere oltre un'ora. Sebbene abbia chiesto al mio cliente di inviare pacchetti null ogni 60 secondi per mantenere attiva la sessione, sono ancora paranoico che la query / processo mysql potrebbe terminare, quindi le mie domande sono:

  1. Una sessione ssh annullata (a causa di inattività) interromperà il processo di query mysql?
  2. Come posso assicurarmi che ciò non accada: il pacchetto null viene inviato ogni 60 secondi abbastanza?

Risposte:


9

La maggior parte delle shell invia SIGHUP al gruppo di processi in primo piano all'uscita (e, in alcuni, anche i processi in background, in bash questo è controllato con l'opzione shell huponexit), che potrebbe causare la sua morte, a seconda di come lo gestisce il client mysql.

Puoi eseguire il tuo comando anteposto nohupper farlo ripartire da init se la tua shell esce, indipendentemente dal fatto che la tua shell invii SIGHUP o meno (essere riparati da init non è specificamente correlato a nohup - è solo che è sopravvissuto al suo genitore).

Possibilmente una soluzione più appetibile sarebbe usare tmux, screen, dtacho simile per eseguire il client estratta lontano dalla shell e terminale di controllo. In questo modo, se la shell si disconnette, ti riconnetti alla sessione in cui stavi eseguendo la query.

In generale i pacchetti keepalive non contano, la connessione non si interromperà senza motivo. Una preoccupazione più urgente sarebbe una perdita di connessione tra il client e il server per altri motivi (errore di rete, ecc.).


Grazie! Solo per chiarimenti, sto eseguendo la query effettiva all'interno di mysql - quindi finché preposto nohupquando eseguo l' accesso a mysql, questo persisterà le query in esecuzione all'interno?
njp,

1
@njp Se vuoi correre in modo interattivo, nohupnon ti sarà molto utile, dal momento che il REPL mysql non sarà collegato al terminale. Prova invece a utilizzare uno dei multiplexer (o dtach) di cui ho parlato sopra, probabilmente si adatteranno meglio alle tue esigenze.
Chris Down,

2

Ho iniziato a eseguire screensessioni quando ho inserito una casella, parzialmente per evitarlo e come bonus aggiuntivo, ottengo più schede, non posso battere. Se sono disconnesso per qualche motivo, posso ricollegarmi alla mia sessione dello schermo.

Aggiornare

Per rispondere al n. 2, corro mysqlda una shell bash attraverso una sessione dello schermo. Sembra complicato, ma è solo:

$: screen
$: mysql

Puoi modificare il tuo file ~ / .screenrc per aggiungere didascalie nella parte inferiore della sessione dello schermo in modo da poter tenere traccia delle tue schede, rinominare le tue schede, ecc. Se sei mai disconnesso, quando ti riconnetti semplicemente esegui

$: screen -d

e che mostrerà tutte le sessioni distaccate. Per ricollegarlo, esegui semplicemente qualcosa di simile

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

O qualunque fosse l'id della sessione dello schermo. Sei tornato da dove eri rimasto. screen -dTuttavia, è necessario eseguire lo stesso utente che ha avviato la sessione dello schermo, semplicemente FYI o root. Non ne sono davvero sicuro perché dopo aver inserito SSH, sudo su -quindi non devo eseguire tutti i comandi.


1
Sebbene i consigli da utilizzare screensiano validi, non rispondono direttamente alle due domande elencate dall'OP.
Barun,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.