यदि मेरा ssh कनेक्शन ड्रॉप हो जाता है तो भी क्या MySQL क्वेरी चलती रहेगी?


16

मैंने SSH पर एक सर्वर से कनेक्ट किया है और mysql में लॉग इन किया है, और इसे एक क्वेरी (जिसके परिणाम एक CSV में डंप किए जाते हैं) चलाने के लिए कहा है जो एक घंटे से अधिक समय ले सकता है। हालाँकि मैंने अपने ग्राहक को सत्र को सक्रिय रखने के लिए प्रत्येक 60 सेकंड में अशक्त पैकेट भेजने के निर्देश दिए हैं, फिर भी मैं mysql क्वेरी / प्रक्रिया को समाप्त कर सकता हूं, इसलिए मेरे प्रश्न हैं:

  1. क्या रद्द ssh सत्र (निष्क्रियता के कारण) mysql क्वेरी प्रक्रिया को मार देगा?
  2. मैं यह कैसे सुनिश्चित कर सकता हूं - क्या प्रत्येक पैकेट 60 सेकंड के लिए पर्याप्त नहीं है?

जवाबों:


9

अधिकांश गोले बाहर निकलने पर अग्रभूमि प्रक्रिया समूह (और, कुछ में, पृष्ठभूमि प्रक्रियाओं के रूप में अच्छी तरह से, इसे खोल विकल्प के साथ नियंत्रित किया जाता है huponexit) में SITEUP भेजते हैं , जो आपके mysql क्लाइंट को कैसे संभालता है, इस पर निर्भर करता है।

यदि आप nohupअपने शेल को SITEUP भेजते हैं या नहीं, तो यह आपके आदेश को पूर्व निर्धारित से चलाया जा सकता है, भले ही आपका शेल SUBUP भेजता हो या नहीं (init द्वारा reparented होना विशेष रूप से nohup से संबंधित नहीं है - यह सिर्फ इतना है कि यह अपने माता-पिता को उल्लिखित करता है)।

संभवतः एक अधिक स्वादिष्ट समाधान का उपयोग किया जाएगा tmux, screen, dtachया ग्राहक को चलाने के लिए इसी तरह के अपने खोल और टर्मिनल को नियंत्रित करने से दूर निकाला। इस तरह, यदि आपका शेल डिस्कनेक्ट हो जाता है, तो आप केवल उस सत्र को फिर से कनेक्ट करते हैं, जिसमें आप क्वेरी चला रहे थे।

सामान्य तौर पर रखने वाले पैकेट कोई मायने नहीं रखेंगे, कनेक्शन बिना किसी कारण के समाप्त नहीं होगा। अधिक दबाव की चिंता ग्राहक और सर्वर के बीच अन्य कारणों (नेटवर्क की विफलता, आदि) के बीच संबंध का नुकसान होगा।


धन्यवाद! स्पष्टीकरण के लिए, मैं mysql के भीतर वास्तविक क्वेरी चला रहा हूं - nohupजब तक मैं mysql में लॉग इन कर रहा हूं , तब तक यह अंदर चल रहे प्रश्नों को बनाए रखेगा?
njp

1
@njp यदि आप संवादात्मक रूप से चलाना चाहते हैं, तो आपके लिए nohupबहुत अधिक उपयोग नहीं होगा, क्योंकि mysql REPL टर्मिनल से जुड़ा नहीं होगा। मल्टीप्लेक्सर्स (या dtach) में से किसी एक का उपयोग करने का प्रयास करें जिसके बजाय मैंने ऊपर उल्लेख किया है, वे शायद आपकी आवश्यकताओं के अनुरूप होंगे।
क्रिस डाउन

2

screenजब मैंने एक बॉक्स में ssh, आंशिक रूप से उस को रोकने के लिए और एक अतिरिक्त बोनस के रूप में, मुझे कई टैब मिल रहे हैं, तो मैं इसे नहीं हरा सकता, मैंने सत्र चलाना शुरू कर दिया है। अगर मुझे किसी कारण से काट दिया जाता है, तो मैं अपने स्क्रीन सेशन को रीटेट कर सकता हूं।

अपडेट करें

# 2 का जवाब देने के लिए, मैं mysqlएक स्क्रीन सत्र के माध्यम से बैश शेल के भीतर से चलूंगा। जटिल लगता है, लेकिन यह सिर्फ है:

$: screen
$: mysql

आप स्क्रीन सत्र के निचले भाग पर कैप्शन जोड़ने के लिए अपनी ~ / .स्क्रीन आर्केड फ़ाइल को संपादित कर सकते हैं ताकि आप अपने टैब का ट्रैक रख सकें, अपने टैब का नाम बदल सकें, आदि। यदि आप कभी डिस्कनेक्ट हो जाते हैं, तो आप बस चलाते हैं

$: screen -d

और वह किसी भी अलग सत्र दिखाएगा। रिटैटच करने के लिए, बस कुछ ऐसा चलाएं

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

या जो भी स्क्रीन सेशन की आईडी थी। तुम ठीक पीछे हो जहाँ तुमने छोड़ा था। आपको screen -dउसी उपयोगकर्ता के रूप में चलना होगा जिसने स्क्रीन सत्र शुरू किया था, बस फी या कोर्स की जड़। मैं वास्तव में निश्चित नहीं हूं क्योंकि मैं हमेशा मैं ssh करने के बाद sudo su -इसलिए मुझे हर आज्ञा को सूडो नहीं करना पड़ता।


1
जबकि उपयोग करने की सलाह screenध्वनि है, यह ओपी द्वारा सूचीबद्ध दो सवालों के सीधे जवाब नहीं देता है।
बरुण
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.