दिलचस्प पोस्ट
का अर्थ – <? Xml संस्करण = "1.0" एन्कोडिंग = "यूटीएफ -8"?> Base64 के साथ एक पायथन स्ट्रिंग को एन्कोड करने के लिए मुझे 'बी' की आवश्यकता क्यों है? NA के सभी 0 मानों को बदलें एससीएसएस और एसस के बीच अंतर क्या है? DoCmd.SetWarnings और CurrentDB.Execute के बीच अंतर क्या है चेतावनी: mysqli_query () पैरामीटर 1 को mysqli होने की उम्मीद है, शून्य में दिए गए mysql-python अधिष्ठापन त्रुटि: फ़ाइल 'config-win.h' में शामिल नहीं खोल सकता एसक्यूएल – समूह में उपनाम का उपयोग करके टॉमकेट में जड़ में अपने आवेदन को नियोजित करना NSUserDefaults में छवियों को सहेजें? कंसोल में मैं तेज़ रंग का आउटपुट कैसे लिख सकता हूं? रूबी में सरणी टुकड़ा करना: अयोग्य व्यवहार के लिए स्पष्टीकरण (Rubykoans.com से लिया गया) मैं एक मॉडेल UIViewController की एनीमेशन शैली कैसे बदल सकता हूँ? एक पैटर्न के सामने एक नई पंक्ति कैसे डालें? Web.config संशोधित होने पर ASP.NET अनुप्रयोग को पुनरारंभ करने से कैसे रोकें?

त्रुटि 2006 (HY000): MySQL सर्वर दूर चला गया है

जब मैं एक बड़ी एसक्यूएल फ़ाइल (एक बड़ी INSERT क्वेरी) स्रोत की कोशिश करता हूं, तो मुझे यह त्रुटि मिलती है।

 mysql> source file.sql ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 2 Current database: *** NONE *** ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 3 Current database: *** NONE *** 

तालिका में कुछ भी अपडेट नहीं किया गया है। मैंने टेबल / डाटाबेस को हटाने और हटाना करने की कोशिश की है, साथ ही साथ MySQL को पुनरारंभ करना भी। इनमें से कोई भी समस्या समस्या को हल नहीं करता है

यहां मेरा अधिकतम-पैकेट आकार है:

 +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 1048576 | +--------------------+---------+ 

यहां फ़ाइल का आकार दिया गया है:

 $ ls -s file.sql 79512 file.sql 

जब मैं दूसरी विधि कोशिश करता हूँ …

 $ ./mysql -u root -p my_db < file.sql Enter password: ERROR 2006 (HY000) at line 1: MySQL server has gone away 

वेब के समाधान से एकत्रित समाधान "त्रुटि 2006 (HY000): MySQL सर्वर दूर चला गया है"

 max_allowed_packet=64M 

मेरी लाइन में इस लाइन को जोड़ने से मेरी समस्या हल हो जाती है

यह उपयोगी है जब कॉलम के बड़े मूल्य हैं, जो मुद्दों का कारण बनता है, आप यहां स्पष्टीकरण पा सकते हैं।

विंडोज़ में यह फाइल यहां स्थित है: "सी: \ प्रोग्रामडेटा \ मायएसक्यूएल \ मायस SQL ​​सर्वर 5.6"

लिनक्स पर (उबंटु): / etc / mysql

आप मैक्स अनुमत पैकेट बढ़ा सकते हैं

 SET GLOBAL max_allowed_packet=1073741824; 

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet

वैश्विक कारण और मेरी सीएनएफ सेटिंग्स कुछ कारणों से मेरे लिए काम नहीं करती थीं क्लाइंट को सीधे max_allowed_packet मान को पास करके यहां काम किया है:

mysql -h <hostname> -u username -p --max_allowed_packet=1073741824 <databasename> < db.sql

सामान्य में त्रुटि:

त्रुटि: 2006 ( CR_SERVER_GONE_ERROR ) – MySQL सर्वर दूर चला गया है

का अर्थ है कि क्लाइंट सर्वर पर कोई प्रश्न नहीं भेज सकता है


mysql आयात

अपने विशिष्ट मामले में mysql माध्यम से डेटाबेस फ़ाइल आयात करते समय, यह सबसे अधिक संभावना है कि एसक्यूएल फ़ाइल में कुछ प्रश्न आयात करने के लिए बहुत बड़े हैं और वे सर्वर पर निष्पादित नहीं किए जा सकते हैं, इसलिए क्लाइंट पहली बार त्रुटि पर विफल रहता है

तो आपके पास निम्न संभावनाएं हैं:

  • mysql लिए बाध्य विकल्प ( -f ) जोड़ें और शेष प्रश्नों को निष्पादित करें।

    यह उपयोगी है यदि डेटाबेस में कैश से संबंधित कुछ बड़े प्रश्न हैं जो वैसे भी प्रासंगिक नहीं हैं।

  • अपने सर्वर कॉन्फ़िग में max_allowed_packet और ~/.my.cnf (जैसे ~/.my.cnf )।

  • बड़े प्रश्नों को तोड़ने के लिए --skip-extended-insert विकल्प का उपयोग कर डेटाबेस को डंप करें। फिर इसे फिर से आयात करें

  • mysql लिए --max-allowed-packet विकल्प लागू करने का प्रयास करें


सामान्य कारण

सामान्य तौर पर इस त्रुटि का अर्थ कई चीजें हो सकता है, जैसे:

  • सर्वर से एक क्वेरी गलत या बहुत बड़ी है,

    समाधान: max_allowed_packet चर बढ़ाएं

    • सुनिश्चित करें कि चर [mysqld] अनुभाग के अंतर्गत है, न कि [mysql]

    • परीक्षण के लिए बड़ी संख्या का उपयोग करने से डरो मत (जैसे 1G )

    • MySQL / मारियाडाबी सर्वर को पुनः आरंभ करने के लिए मत भूलना

    • मान जांचें कि मूल्य ठीक से निर्धारित किया गया था:

       mysql -sve "SELECT @@max_allowed_packet" # or: mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'" 
  • आपको क्लाइंट साइड पर टीसीपी / आईपी कनेक्शन से एक टाइमआउट मिला है

    समाधान: wait_timeout चर बढ़ाएं

  • आपने सर्वर से कनेक्शन के बंद होने के बाद एक क्वेरी चलाने की कोशिश की।

    समाधान: आवेदन में एक तर्क त्रुटि को सही किया जाना चाहिए।

  • होस्ट नाम lookups विफल (उदा। DNS सर्वर समस्या), या सर्वर --skip-networking विकल्प के साथ शुरू किया गया है।

    एक अन्य संभावना यह है कि आपका फ़ायरवॉल MySQL पोर्ट को अवरोधित करता है (जैसे डिफ़ॉल्ट रूप से 3306)।

  • चल रहे धागा को मार दिया गया है, इसलिए दोबारा फिर से प्रयास करें।

  • आपको एक बग का सामना करना पड़ा है जहां क्वेरी निष्पादित करते समय सर्वर की मृत्यु हो गई थी।

  • एक अलग होस्ट पर चल रहे ग्राहक को कनेक्ट करने के लिए आवश्यक विशेषाधिकार नहीं हैं।

  • और बहुत अधिक, इस पर अधिक जानें: B.5.2.9 MySQL सर्वर दूर चला गया है ।


डिबगिंग

यहां कुछ विशेषज्ञ स्तरीय डीबग विचार हैं:

  • लॉग की जांच करें, उदा

     sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error") 
  • mysql , telnet या पिंग फ़ंक्शंस (जैसे PHP में mysql_ping ) के द्वारा अपने कनेक्शन का परीक्षण करें।

  • MySQL संचार को सूँघने के लिए tcpdump का उपयोग करें (सॉकेट कनेक्शन के लिए काम नहीं करेगा), उदाहरण के लिए:

     sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings 
  • लिनक्स पर, strace उपयोग करें। बीएसडी / मैक पर dtrace / dtruss , जैसे

     sudo dtruss -a -fn mysqld 2>&1 

    देखें: MySQL डीट्रांसिंग के साथ आरंभ करना

अधिक जानें कैसे MySQL सर्वर या ग्राहक को डीबग करें: 26.5 डीबगिंग और पोर्टिंग MySQL


सोर्स कोड

CR_SERVER_GONE_ERROR त्रुटि ( mysqlx.cc ) फेंकने के लिए जिम्मेदार स्रोत कोड:

 void Connection::throw_mysqlx_error(const boost::system::error_code &error) { if (!error) return; switch (error.value()) { // OSX return this undocumented error in case of kernel race-conndition // lets ignore it and next call to any io function should return correct // error case boost::system::errc::wrong_protocol_type: return; case boost::asio::error::eof: case boost::asio::error::connection_reset: case boost::asio::error::connection_aborted: throw Error(CR_SERVER_GONE_ERROR, "MySQL server has gone away"); case boost::asio::error::broken_pipe: throw Error(CR_BROKEN_PIPE, "MySQL server has gone away"); default: throw Error(CR_UNKNOWN_ERROR, error.message()); } } 

मेरे पास एक ही समस्या थी लेकिन मेरी आईएनआई / मेरी सीएनएफ फ़ाइल में [mysqld] के तहत max_allowed_packet को बदलते हुए चाल की गई।

एक पंक्ति जोड़ें

 max_allowed_packet=500M 

अब आपके द्वारा किया जाने के बाद, MySQL सेवा को पुनरारंभ करें

बस के मामले में, आप का उपयोग कर सकते हैं चर जांच करने के लिए

 $> mysqladmin variables -u user -p 

यह वर्तमान चर को प्रदर्शित करेगा, इस मामले में max_allowed_packet, और जैसा कि किसी ने दूसरे उत्तर में कहा है, आप इसे अस्थायी रूप से सेट कर सकते हैं

 mysql> SET GLOBAL max_allowed_packet=1072731894 

मेरे मामले में सीएनएफ फाइल को ध्यान में नहीं लिया गया और मुझे नहीं पता कि क्यों, इसलिए एसईटी ग्लोबल कोड वास्तव में मदद करता है।

समाधान [mysqld] टैग के तहत, आपके विकल्प फ़ाइल में connect_timeout और connect_timeout पैरामीटर के मूल्यों को बढ़ा [mysqld]

मुझे एक 400MB mysql बैकअप ठीक करना था और यह मेरे लिए काम किया था (जिन मानों का मैंने इस्तेमाल किया है उनमें थोड़ा अतिरंजित है, लेकिन आप बिंदु प्राप्त करते हैं):

 [mysqld] port=3306 explicit_defaults_for_timestamp = TRUE connect_timeout = 1000000 net_write_timeout = 1000000 wait_timeout = 1000000 max_allowed_packet = 1024M interactive_timeout = 1000000 net_buffer_length = 200M net_read_timeout = 1000000 

आप रूट (या सुपर विशेषाधिकार) के रूप में डेटाबेस में प्रवेश भी कर सकते हैं और करते हैं

 set global max_allowed_packet=64*1024*1024; 

एक MySQL के रूप में अच्छी तरह से पुनः आरंभ की आवश्यकता नहीं है ध्यान दें कि आपको अन्य समाधानों में उल्लिखित रूप में अपनी my.cnf फाइल को ठीक करना चाहिए:

 [mysqld] max_allowed_packet=64M 

और MySQL को पुनरारंभ करने के बाद परिवर्तन की पुष्टि करें:

 show variables like 'max_allowed_packet'; 

आप कमांड लाइन का भी उपयोग कर सकते हैं, लेकिन इससे आरंभ / स्टॉप स्क्रिप्ट अपडेट करने की आवश्यकता हो सकती है, जो सिस्टम अपडेट और पैच से बच नहीं सकते हैं।

अनुरोध के अनुसार, मैं यहां अपना खुद का जवाब जोड़ रहा हूं। यह काम करता है देखने के लिए खुश!

कुछ चीजें यहाँ हो सकती हैं;

  • आपका INSERT लंबे समय से चल रहा है, और क्लाइंट डिस्कनेक्ट हो रहा है। जब यह रीकनेक्ट करता है कि वह किसी डेटाबेस का चयन नहीं कर रहा है, इसलिए त्रुटि। यहां एक विकल्प कमांड लाइन से अपनी बैच फ़ाइल को चलाने के लिए है, और तर्कों में डेटाबेस का चयन करें, जैसे;

$ mysql db_name <source.sql

  • किसी अन्य को php या किसी अन्य भाषा के माध्यम से अपना आदेश चलाने के लिए है प्रत्येक लंबे समय से चलने वाले वक्तव्य के बाद, आप कनेक्शन बंद कर सकते हैं और फिर से खोल सकते हैं, यह सुनिश्चित कर लें कि आप प्रत्येक क्वेरी के शुरू में कनेक्ट हैं।

मैंने त्रुटि ERROR 2006 (HY000) at line 97: MySQL server has gone away हल किया ERROR 2006 (HY000) at line 97: MySQL server has gone away और सफलतापूर्वक एक> 5 जीबी एसक्यूएल फ़ाइल को क्रम में इन दो चरणों को निष्पादित करके माइग्रेट किया है:

  1. निम्न सामग्री के साथ दूसरों की सिफारिश की गई /etc/my.cnf बनाया गया है: [mysql] connect_timeout = 43200 max_allowed_packet = 2048M net_buffer_length = 512M debug-info = TRUE
  2. झंडे जोड़ना – --force --wait --reconnect आदेश को --force --wait --reconnect करें (अर्थात mysql -u root -p -h localhost my_db < file.sql --verbose --force --wait --reconnect )।

महत्वपूर्ण नोट: दोनों चरणों का पालन करना आवश्यक था, क्योंकि अगर मैंने /etc/my.cnf फ़ाइल में परिवर्तन करने के साथ-साथ उन झंडे को जोड़ने में परेशान नहीं किया था, तो आयात के बाद कुछ तालियां गायब हुई थीं।

सिस्टम उपयोग किया गया: OSX एल कैपीटन 10.11.5; mysql Ver 14.14 वितरक 5.5.51 osx10.8 (i386) के लिए

इस पर अधिक जानकारी के लिए देखें http://dev.mysql.com/doc/refman/5.5/en/gone-away.html या http://dev.mysql.com/doc/refman/5.1/en/gone -अलाओ- जैसा उचित

यदि आप मैक पर हैं और मेरे जैसे ब्रू के माध्यम से स्थापित MySQL, निम्नलिखित काम किया है।

  1. cp $(brew --prefix mysql)/support-files/my-default.cnf /usr/local/etc/my.cnf

स्रोत: homebrew mysql स्थापित करने के लिए, my.cnf कहां है?

  1. max_allowed_packet=1073741824 को max_allowed_packet=1073741824 जोड़ें

  2. mysql.server restart

जब मैं Mysql क्लस्टर का उपयोग करता हूं, तो मुझे इस त्रुटि का सामना करना पड़ा, मुझे नहीं पता कि यह प्रश्न क्लस्टर उपयोग से है या नहीं। जैसा कि त्रुटि बिल्कुल वही है, इसलिए मेरा समाधान यहां दें। इस त्रुटि के कारण डेटा नोड अचानक दुर्घटना लेकिन जब नोड्स दुर्घटना होती है, तब भी आप सीएमडी का उपयोग करके सही परिणाम प्राप्त कर सकते हैं:

 ndb_mgm -e 'ALL REPORT MEMORYUSAGE' 

और mysqld भी सही तरीके से काम करता है.तो पहले, मुझे समझ में नहीं आ रहा है कि क्या गलत है। और लगभग 5 मिनट बाद, ndb_mgm परिणाम कोई डेटा नोड काम नहीं दिखाता है। तब मैं इस समस्या का एहसास करता हूं। इसलिए, सभी डेटा नोड्स को पुनरारंभ करने का प्रयास करें, फिर mysql सर्वर वापस आ गया है और सब कुछ ठीक है।

लेकिन एक बात मेरे लिए अजीब है, जब मैंने कुछ प्रश्नों के लिए mysql सर्वर खो दिया है, जब मैं सीएमडी show tables तरह उपयोग करता हूं, तब भी मुझे वापसी की जानकारी 33 rows in set (5.57 sec) मिल सकती है, लेकिन कोई तालिका जानकारी प्रदर्शित नहीं की जाती है।

अगर यह कनेक्शन आईडी दोबारा कनेक्ट हो रहा है, तो सर्वर लगभग निश्चित तौर पर बस क्रैश हो गया है।

सर्वर व्यवस्थापक से संपर्क करें और समस्या का निदान करने के लिए उन्हें प्राप्त करें। कोई गैर-दुर्भावनापूर्ण SQL सर्वर को क्रैश करना चाहिए, और mysqldump का आउटपुट निश्चित रूप से नहीं होना चाहिए।

शायद ऐसा मामला है कि सर्वर व्यवस्थापक ने कुछ बड़ी परिचालन त्रुटि बनाई है जैसे कि आर्किटेक्चर के पते-स्थान की सीमाओं की तुलना में बफर आकार निर्दिष्ट करना या वर्चुअल मेमोरी क्षमता से अधिक। MySQL त्रुटि-लॉग में शायद कुछ प्रासंगिक जानकारी होगी; वे इस पर निगरानी रखेंगे यदि वे किसी भी तरह सक्षम हों

यह एक दुर्लभ समस्या का अधिक है, लेकिन मैंने इसे यह देखा है कि अगर किसी व्यक्ति ने अपने डीबी को दूसरे सर्वर पर माइग्रेट करने का एक तरीका के रूप में संपूर्ण / var / lib / mysql निर्देशिका की प्रतिलिपि बनाई है कारण यह काम नहीं करता है क्योंकि डेटाबेस चल रहा था और लॉग फ़ाइलों का उपयोग कर रहा था। यह कभी-कभी काम नहीं करता है अगर लॉग / var / log / mysql में लॉग हैं इसका समाधान / var / log / mysql फ़ाइलों को भी कॉपी करना है

अगर इस जवाब में से कोई भी आपको समस्या का समाधान नहीं करता है, तो मैंने तालिकाओं को निकाल कर और उन्हें इस तरह से स्वचालित रूप से फिर से बनाने का हल किया है:

 when creating the backup, first backup structure and be sure of add: DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT CREATE PROCEDURE / FUNCTION / EVENT IF NOT EXISTS AUTO_INCREMENT 

तो बस अपने डीबी के साथ इस बैकअप का उपयोग करें और यह आपके द्वारा आवश्यक तालिकाओं को हटा देगा और पुनः निर्मित करेगा।

तो फिर आप बैकअप बस डेटा, और वही करते हैं, और यह काम करेगा।

इस तरह mysql ग्राहक का उपयोग करने के बारे में कैसे:

 mysql -h <hostname> -u username -p <databasename> < file.sql