Ssh bağlantım kesilse bile MySQL sorgum çalışmaya devam edecek mi?


16

SSH üzerinden bir sunucuya bağlandım ve mysql'de oturum açtım ve bir saatten fazla sürebilen bir sorgu (sonuçları bir CSV'ye dökülür) çalıştırmasını istedim. Her ne kadar müvekkilim oturumu aktif tutmak için her 60 saniyede bir boş paketleri göndermek için talimat vermiş olsa da, hala mysql sorgusu / işlem sona erdirmek paranoyak, bu yüzden sorularım:

  1. İptal edilen bir ssh oturumu (etkin olmama nedeniyle) mysql sorgu işlemini öldürür mü?
  2. Bunun olmamasını nasıl sağlayabilirim - boş paket her 60 saniyede bir gönderiliyor mu?

Yanıtlar:


9

Çoğu kabuk SIGHUP'u çıkışta ön plan işlem grubuna gönderir (ve bazılarında arka plan işlemlerinde de bash'de bu kabuk seçeneğiyle denetlenir huponexit), bu da mysql istemcinizin bunu nasıl ele aldığına bağlı olarak ölmesine neden olabilir.

Sen mevcutsa önüne senin komutunu çalıştırabilirsiniz nohupKabuk çıkar eğer olursa olsun kabuk SIGHUP veya olmasın gönderir bakılmaksızın, init tarafından reparented olması (init nohup özellikle ilişkili değildir tarafından reparented ediliyor - oluyor sadece onun üst ömrü vefa ettiğini).

Muhtemelen daha makul bir çözüm kullanmak olacaktır tmux, screen, dtachveya müşteri çalıştırmak için benzer şekilde kabuk ve terminal kontrol uzak soyutlanmış. Bu şekilde, kabuğunuz kesilirse, sorguyu çalıştırdığınız oturuma yeniden bağlanırsınız.

Genel olarak, koruyucu paketler önemli olmayacak, bağlantı sadece sebepsiz olarak sona ermeyecektir. Daha acil bir endişe, diğer nedenlerle istemci ile sunucu arasındaki bağlantı kaybı olacaktır (ağ hatası, vb.).


Teşekkür ederim! Sadece açıklama için, ben mysql içinde nohupoturum açarken prepend sürece mysql içinde gerçek sorgu çalıştırıyorum , bu içinde çalışan sorguları devam edecektir?
njp

1
@njp Etkileşimli olarak çalıştırmak nohupistiyorsanız, mysql REPL terminale takılmayacağından sizin için çok fazla fayda sağlamaz. Bunun yerine yukarıda bahsettiğim çoklayıcılardan (veya dtach) birini kullanmayı deneyin, muhtemelen ihtiyaçlarınıza daha uygun olacaktır.
Chris Down

2

screenBir kutuya ssh yaptığımda oturumları çalıştırmaya başladım , kısmen bunu önlemek için ve ek bir bonus olarak, birden fazla sekme alıyorum, yenemezsin. Herhangi bir nedenle bağlantım kesilirse, ekran oturumuma yeniden bağlanabilirim.

Güncelleme

# 2'ye cevap vermek için, mysqlbir bash kabuğunun içinden bir ekran oturumu boyunca koşardım. Kulağa karmaşık geliyor, ama sadece:

$: screen
$: mysql

~ / .Screenrc dosyanızı ekran oturumunun altına altyazı eklemek üzere düzenleyebilirsiniz, böylece sekmelerinizi takip edebilir, sekmelerinizi yeniden adlandırabilir, vb.

$: screen -d

ve bu bağımsız oturumları gösterecektir. Tekrar takmak için,

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

Veya ekran oturumunun kimliği ne olursa olsun. Kaldığın yere geri döndün. Sen çalıştırmalısınız screen -dolsa ekran oturumu başladı aynı kullanıcı elbette sadece bilginize veya kök olarak. Gerçekten emin değilim çünkü ben ssh sonra ben her zaman sudo su -sudo her komut zorunda değilsiniz.


1
Kullanım tavsiyesi screensağlam olsa da , OP tarafından listelenen iki soruya doğrudan cevap vermez.
Barun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.