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


238

मैं कुछ फ़ाइलों को संसाधित करने और दूरस्थ MySQL सर्वर को परिणामों की रिपोर्ट करने के लिए अपने कार्यालय में एक सर्वर चला रहा हूं।

फाइल प्रोसेसिंग में कुछ समय लगता है और प्रक्रिया निम्न त्रुटि से आधी हो जाती है:

2006, MySQL server has gone away

मैंने MySQL सेटिंग के बारे में सुना है, Wait_timeout , लेकिन क्या मुझे अपने कार्यालय या दूरस्थ MySQL सर्वर पर सर्वर को बदलना होगा?


2
यह निर्भर करता है कि डायन सर्वर त्रुटि देता है
bksi


11
Google से यहां आने वाले लोगों के लिए: यदि max_allowed_packetआकार या wait_timeoutराशि को बदलना ठीक नहीं है, तो अपने मेमोरी उपयोग की जांच करें। मुझे वही त्रुटि मिल रही थी और यह मेरे सर्वर द्वारा मेमोरी से बाहर चलने के कारण हो रहा था। मैंने 1GB स्वैप फ़ाइल जोड़ी और इसे ठीक किया।
पीकमेंडर 2

2
@ Pikamander2 संकेत के लिए धन्यवाद!
इहां

4
ओह! तो यह सब झूठ है? Mysql सर्वर वास्तव में कहीं नहीं गया था? यह अभी भी मेरे सर्वर में है? Whao! :))
डेमिलाला ओलोवोकेरे

जवाबों:


32

यह जांचना आसान हो सकता है कि क्या कनेक्शन है और यदि आवश्यक हो तो इसे फिर से स्थापित करें।

देखें PHP: उस पर जानकारी के लिए mysqli_ping


अच्छी बात है, अगर आपके पास एक ऐसी प्रक्रिया है जो रुक-रुक कर चल रही है, तो अपना कनेक्शन जारी करना बेहतर है, इसलिए आपने सभी कनेक्शनों का उपयोग नहीं किया है। कनेक्शन का पुनर्निर्माण आमतौर पर सस्ता है। +1
यज़मीर रामिरेज़

1
2018 में: mysqli_ping ख़राब है
fb

@ अगर पीडीओ के साथ ऐसा करने के लिए क्या किया जाता है?
beppe9000

359

मैं कई बार इसका सामना कर चुका हूं और मुझे आमतौर पर बहुत कम डिफ़ॉल्ट सेटिंग का जवाब मिला है max_allowed_packet

इसे /etc/my.cnf(अंडर [mysqld]) 8 या 16M में उठाना आमतौर पर इसे ठीक करता है। (MySql 5.7 में डिफ़ॉल्ट है 4194304, जो 4MB है।)

[mysqld]
max_allowed_packet=16M

नोट: यदि मौजूद नहीं है तो बस लाइन बनाएं

नोट: यह आपके सर्वर पर सेट हो सकता है क्योंकि यह चल रहा है।

का उपयोग करें set global max_allowed_packet=104857600। यह इसे 100MB पर सेट करता है।


28
ध्यान दें कि यह आपके सर्वर पर सेट हो सकता है क्योंकि यह चल रहा है। उपयोग करें: "वैश्विक max_allowed_packet = 104857600 सेट करें"। नोट: मेरा मूल्य इसे 100MB पर सेट करता है।
रिकुमाली

26
Xampp उपयोगकर्ताओं के लिए, my.cnf पर पाया जा सकता है: C: \ xampp \ mysql \ bin \
वैलेंटाइन डेस्पा

3
WAMP पर: C: \ wamp \ bin \ mysql \ mysql5.6.12 \ my.ini, [wampmysqld] के तहत max_allowed_packet = 500M सेट करें
Elia Weiss

2
मेरी समस्या को भी तय किया :)
अल्ताफ हुसैन

2
महत्वपूर्ण नोट: मुझे इस प्रभाव के लिए अपने mysql सर्वर को फिर से शुरू करना पड़ा। यानी mysql.server stop, mysql.server start(अक्टूबर 2018, MySQL v5.7, MacOS)
नितिन नैन

41

मैं एक ही समस्या है, लेकिन changeing था max_allowed_packetमें my.ini/my.cnfके तहत फ़ाइल [mysqld]चाल बना दिया।

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

max_allowed_packet = 500M

अब restart the MySQL serviceएक बार जब आप कर रहे हैं।


5
दूसरे आदमी ने लिखा 16M, आप 500M लिख रहे हैं, इस सेटिंग का क्या महत्व है?
pal4life

1
@ pal4life यह सम्मिलित अनुमति कथन का अधिकतम आकार है। क्या हो अगर आपका इंसर्ट स्टेटमेंट 16M से ज्यादा हो (अगर स्टेटमेंट में लॉन्गबॉब कॉलम हो या ऐसा हो) तो सुरक्षित होने के लिए अगर आप भारी मात्रा में डेटा डाल रहे हैं तो इसे 500M की तरह बड़ा बना दें।
सतीश डी

यह मेरे लिए काम करता है लेकिन मुझे पता नहीं क्यों। डिफ़ॉल्ट मान 1M था लेकिन जब मैंने इसे 100M में बदल दिया तो त्रुटि चली गई। समस्या तब शुरू हुई जब मैंने अपने सर्वर पर निष्क्रिय थ्रेड्स की संख्या को कम करने के प्रयास में wait_timeout = 30 सेट किया।
विंसेंट

36

मैंने MySQL डेटाबेस को पुनर्स्थापित करने के लिए MySQL कमांड-लाइन का उपयोग किया, जो 7GB से अधिक आकार का है, और यह काम करता है।

set global max_allowed_packet=268435456;

आश्चर्य था कि इसे क्यों उतारा गया? पैकेट के आकार से संबंधित त्रुटि के लिए समझ में आता है ...
फ़्लोरिनेल यह

इससे मेरी समस्या हल हो गई, यह सीधे तरीके से सवाल से संबंधित नहीं है, लेकिन इस दूसरे मुद्दे वाले लोगों की मदद करना चाहिए।
Migerusantte

यह देखने के लिए कि क्या वर्तमान मूल्य बदल गया है या देख सकते हैंshow variables like 'max_allowed_packet';
Marcin

16

त्रुटि: 2006 ( CR_SERVER_GONE_ERROR )

संदेश: MySQL सर्वर चला गया है

आम तौर पर आप कनेक्ट करने और फिर इस समस्या को हल करने के लिए फिर से क्वेरी कर सकते हैं - पूरी तरह से देने से पहले 3-4 बार प्रयास करें।

मुझे लगता है कि आप पीडीओ का उपयोग कर रहे हैं। यदि ऐसा है तो आप पीडीओ अपवाद को पकड़ेंगे, एक काउंटर बढ़ाएँ और फिर कोशिश करें कि काउंटर एक सीमा के नीचे है।

यदि आपके पास एक क्वेरी है जो टाइमआउट का कारण बन रही है तो आप इस चर को निष्पादित करके सेट कर सकते हैं:

SET @@GLOBAL.wait_timeout=300;
SET @@LOCAL.wait_timeout=300;  -- OR current session only

जहां 300 सेकंड की संख्या में आपको लगता है कि क्वेरी अधिकतम समय ले सकती है।

मैसूर कनेक्शन मुद्दों से निपटने के तरीके के बारे में अधिक जानकारी।

संपादित करें: दो अन्य सेटिंग्स जो आप भी उपयोग करना चाहते हैं net_write_timeoutऔर है net_read_timeout



11

प्रतीक्षा_ समय समाप्त होने के कारण यह त्रुटि हुई है।

बस mysql सर्वर पर जाएं इसके wa_timeout की जांच करें:

mysql> SHOW VARIABLES LIKE 'Wait_timeout'

mysql> वैश्विक प्रतीक्षा_ टाइमआउट = ६०० # १० मिनट या अधिकतम प्रतीक्षा समय जो आपको चाहिए

http://sggoyal.blogspot.in/2015/01/2006-mysql-server-has-gone-away.html


मुझे समझ नहीं आता कि कोई भी इस जवाब को क्यों ठुकराएगा? मेरे लिए मददगार था।
तुलसी मूसा

11

इस त्रुटि के कई कारण हैं।

MySQL / MariaDB संबंधित:

  • wait_timeout - सेकंड में समय जो सर्वर कनेक्शन को बंद करने से पहले सक्रिय होने की प्रतीक्षा करता है।
  • interactive_timeout - सेकंड में समय जो सर्वर एक इंटरैक्टिव कनेक्शन की प्रतीक्षा करता है।
  • max_allowed_packet- एक पैकेट या एक उत्पन्न / मध्यवर्ती स्ट्रिंग के बाइट्स में अधिकतम आकार। 1024 के गुणक में सबसे बड़े BLOB के रूप में सेट करें।

My.cnf का उदाहरण :

[mysqld]
# 8 hours
wait_timeout = 28800
# 8 hours
interactive_timeout = 28800
max_allowed_packet = 256M

सर्वर संबंधी:

  • आपके सर्वर में पूरी मेमोरी है - RAM के बारे में जानकारी की जाँच करें free -h

फ्रेमवर्क संबंधित:

  • अपने ढांचे की सेटिंग्स की जाँच करें। उदाहरण के लिए Django उपयोग CONN_MAX_AGE( डॉक्स देखें )

इसे डीबग कैसे करें:


9

विंडोज़ पर वे लोग जो xampp का उपयोग कर रहे हैं, उन्हें इस पथ का उपयोग करना चाहिए xampp / mysql / bin / my.ini और अपनी पसंद के आकार के तहत max_allowed_packet (अनुभाग [mysqld]) में परिवर्तित करें। जैसे

max_allowed_packet=8M

फिर से php.ini (xampp / php / php.ini) पर अपलोड_मैक्स_फाइल को चॉइस आकार बदलें। जैसे

upload_max_filesize=8M

जब तक मुझे यह पता चला कुछ समय के लिए मुझे सिरदर्द हो गया। आशा करता हूँ की ये काम करेगा।


यह चुना हुआ उत्तर होना चाहिए
bysanchy

मुझे upload_max_filesizeपरिवर्तनशील नहीं मिल रहा है। यह हमेशा मेरे mysql में पहचाना नहीं जाता है
अमिनाह नुरैनी

9

मुझे अपने DigitalOcean Ubuntu सर्वर पर यही त्रुटि मिल रही थी।

मैंने max_allowed_packet और wa_timeout सेटिंग्स बदलने की कोशिश की लेकिन दोनों में से किसी ने भी इसे ठीक नहीं किया।

यह पता चला कि मेरा सर्वर रैम से बाहर था। मैंने 1GB स्वैप फ़ाइल जोड़ी और उसने मेरी समस्या ठीक कर दी।

अपनी स्मृति की जाँच करें free -hकि क्या यह कारण है।


1
आपको बहुत - बहुत धन्यवाद! मुझे अपने DigitalOcean पर समान समस्या थी और इस समाधान ने काम किया! मैंने अपनी स्क्रिप्ट के कई उदाहरणों को चलाया लेकिन कुछ थ्रेड्स के बाद यह अचानक बंद हो गया और सभी मौजूदा कनेक्शनों को मार दिया। अब यह सब अच्छा है।
स्तालिनको

7

यह मेरे लिए राम समस्या थी।

मुझे 12 सीपीयू कोर और 32 जीबी रैम वाले सर्वर पर भी यही समस्या थी। मैंने अधिक शोध किया और रैम को मुक्त करने की कोशिश की। यहाँ मैं Ubuntu 14.04 पर RAM मुक्त करने के लिए इस्तेमाल किया गया आदेश है:

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

और, इसने सब कुछ तय कर दिया। मैंने इसे हर घंटे चलाने के लिए क्रोन के तहत निर्धारित किया है।

crontab -e

0 * * * * bash /root/ram.sh;

और, आप इस कमांड का उपयोग यह जांचने के लिए कर सकते हैं कि कितनी मुफ्त रैम उपलब्ध है:

free -h

और, आपको कुछ इस तरह मिलेगा:

             total       used       free     shared    buffers     cached
Mem:           31G        12G        18G        59M       1.9G       973M
-/+ buffers/cache:       9.9G        21G
Swap:         8.0G       368M       7.6G

5

मेरे मामले में यह open_files_limitचर का कम मूल्य था , जिसने डेटा फ़ाइलों के लिए mysqld की पहुंच को अवरुद्ध कर दिया।

मैंने इसकी जाँच की:

mysql> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1185  |
+------------------+-------+
1 row in set (0.00 sec)

जब मैंने वैरिएबल को बड़े मूल्य में बदल दिया, तो हमारा सर्वर फिर से जीवित हो गया:

[mysqld]
open_files_limit = 100000

5

यदि आप 64Bit WAMPSERVER का उपयोग कर रहे हैं, तो कृपया max_allowed_packet के कई आवृत्तियों को खोजें क्योंकि WAMP [wampmysqld64] के तहत निर्धारित मान का उपयोग करता है न कि [mysqldbump] के तहत निर्धारित मान, जो मेरे लिए मुद्दा था, मैं गलत को अपडेट कर रहा था। इसे कुछ इस तरह सेट करें जैसे कि max_allowed_packet = 64M।

उम्मीद है कि यह अन्य Wampserver- उपयोगकर्ताओं को वहाँ से बाहर निकलने में मदद करता है।


5

यह आम तौर पर MySQL सर्वर कनेक्टिविटी मुद्दों या टाइमआउट को इंगित करता है । आम तौर पर my.cnf या इसी तरह के wa_timeout और max_allowed_packet को बदलकर हल किया जा सकता है ।

मैं इन मूल्यों का सुझाव दूंगा:

Wait_timeout = 28800

max_allowed_packet = 8M


4

वैग्रेंट बॉक्स के लिए, सुनिश्चित करें कि आपने बॉक्स को पर्याप्त मेमोरी आवंटित की है

config.vm.provider "virtualbox" do |vb|
  vb.memory = "4096"
end

1
इसके लिए धन्यवाद :)
SynackSA

4

संभावना नहीं है कि आपके पास क्लाइंट और सर्वर के बीच फ़ायरवॉल है जो टीसीपी को कनेक्शन में रीसेट करता है।

मेरे पास यह मुद्दा था, और मैंने पाया कि हमारे कॉर्पोरेट F5 फ़ायरवॉल को निष्क्रिय सत्रों को समाप्त करने के लिए कॉन्फ़िगर किया गया था जो कि 5 मिनट से अधिक के लिए निष्क्रिय है।

एक बार फिर, यह असंभावित परिदृश्य है।


4

यह हमेशा एक अच्छा विचार है कि माईसकल सर्वर के लॉग की जाँच करें, इस कारण से कि वह क्यों चला गया।

यह आपको बताएगा।


4

यदि आप xampp सर्वर का उपयोग कर रहे हैं:

Xampp -> mysql -> bin -> my.ini पर जाएं

पैरामीटर के नीचे बदलें:

max_allowed_packet = 500M

innodb_log_file_size = 128M

इसने मेरी बहुत मदद की :)


3

अपने नीचे लिग्ने को असंगत करें my.ini/my.cnf, इससे आपकी बड़ी फाइल छोटे हिस्से में बंट जाएगी

# binary logging format - mixed recommended
# binlog_format=mixed

सेवा

# binary logging format - mixed recommended
binlog_format=mixed

3

मुझे इस त्रुटि का "# 2006 - MySQL सर्वर दूर चला गया" का हल मिला। समाधान सिर्फ आपको दो फ़ाइलों की जांच करना है

  1. config.inc.php
  2. config.sample.inc.php

खिड़कियों में इन फ़ाइलों का पथ है

C:\wamp64\apps\phpmyadmin4.6.4

इन दो फाइलों में इसका मूल्य है:

$cfg['Servers'][$i]['host']must be 'localhost' .

मेरे मामले में यह था:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

इसे इसमें बदलें:

"$cfg['Servers'][$i]['host']" = 'localhost';

दोनों में सुनिश्चित करें:

  1. config.inc.php
  2. config.sample.inc.php फाइलें 'लोकलहोस्ट' होनी चाहिए।

और अंतिम सेट:

$cfg['Servers'][$i]['AllowNoPassword'] = true;

फिर Wampserver को पुनरारंभ करें।


Phpmyadmin उपयोगकर्ता नाम और पासवर्ड बदलने के लिए

आप phpmyadmin के उपयोगकर्ता नाम और पासवर्ड को config.inc.php फ़ाइल के माध्यम से सीधे बदल सकते हैं

ये दो पंक्तियाँ

$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';

यहां आप नया यूजर नेम और पासवर्ड दे सकते हैं। परिवर्तन के बाद फ़ाइल को सहेजें और WAMP सर्वर को पुनरारंभ करें।


2

मुझे अपने Ubuntu डेस्कटॉप पर विभिन्न MySQL क्लाइंट सॉफ़्टवेयर में त्रुटि 2006 संदेश मिला। यह पता चला कि मेरा JDBC ड्राइवर संस्करण बहुत पुराना था।


2

यह आपकी .sql फ़ाइल आकार की समस्या हो सकती है।

यदि आप xampp का उपयोग कर रहे हैं। Xampp कंट्रोल पैनल पर जाएँ -> MySql config पर क्लिक करें -> my.ini खोलें।

पैकेट का आकार बढ़ाएं।

max_allowed_packet = 2M -> 10M

2

यदि आप XAMPP का उपयोग कर रहे हैं तो एक आसान तरीका है। XAMPP नियंत्रण कक्ष खोलें, और mysql अनुभाग में विन्यास बटन पर क्लिक करें।
यहां छवि विवरण दर्ज करें

अब my.ini पर क्लिक करें और यह एडिटर में खुल जाएगा। अपने आवश्यक आकार के लिए max_allowed_packet अद्यतन करें।

यहां छवि विवरण दर्ज करें

फिर mysql सर्विस को रीस्टार्ट करें। फिर से शुरू पर क्लिक करें। कुछ मिनट रुकें। यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

फिर अपनी मैसकल क्वेरी को फिर से चलाने का प्रयास करें। आशा है कि यह काम करेगा।


2

MAMP 5.3, आपको my.cnf नहीं मिलेगा और उन्हें जोड़ना काम नहीं करता क्योंकि max_allowed_packet को चर में संग्रहीत किया जाता है।

एक समाधान हो सकता है:

  1. पर जाएं http: // localhost / phpmyadmin
  2. SQL टैब पर जाएं
  3. SHOW VARIABLES चलाएं और मान जांचें, यदि यह छोटा है तो बड़े मान के साथ चलाएं
  4. निम्न क्वेरी चलाएँ, यह max_allowed_packet को 7gb पर सेट करता है:

    वैश्विक सेट करें max_allowed_packet = 268435456;

कुछ के लिए, आपको निम्न मूल्यों को भी बढ़ाने की आवश्यकता हो सकती है:

set global wait_timeout = 600;
set innodb_log_file_size =268435456;

0

XAMPP का उपयोग करने वाले उपयोगकर्ताओं के लिए, C: \ xampp \ mysql \ bin \ my.ini में 2 max_allowed_packet पैरामीटर हैं।


0

यह त्रुटि मूल रूप से दो कारणों से होती है।

  1. आपके पास बहुत कम रैम है।
  2. जब आप कनेक्ट करने का प्रयास करते हैं तो डेटाबेस कनेक्शन बंद हो जाता है।

आप इस कोड को नीचे आज़मा सकते हैं।

# Simplification to execute an SQL string of getting a data from the database
def get(self, sql_string, sql_vars=(), debug_sql=0):
    try:            
        self.cursor.execute(sql_string, sql_vars)
        return self.cursor.fetchall()
    except (AttributeError, MySQLdb.OperationalError):
        self.__init__()
        self.cursor.execute(sql_string, sql_vars)
        return self.cursor.fetchall()

यह त्रुटि को कम करता है जो भी इसके पीछे कारण है, विशेष रूप से दूसरे कारण के लिए।

यदि यह कम रैम के कारण होता है, तो आपको डेटाबेस कॉन्फ़िगरेशन से, कोड से डेटाबेस कनेक्शन दक्षता को उठाना होगा, या बस रैम को बढ़ाना होगा।


0

बस इस मामले में यह किसी को भी मदद करता है:

मुझे यह त्रुटि तब हुई जब मैंने एक फ़ंक्शन में कनेक्शन खोला और बंद कर दिया जो कि एप्लिकेशन के कई हिस्सों से कॉल किया जाएगा। हमें बहुत अधिक कनेक्शन मिले हैं इसलिए हमने सोचा कि मौजूदा कनेक्शन का पुन: उपयोग करने या इसे फेंकने और इसे नया बनाने के लिए एक अच्छा विचार हो सकता है:

  public static function getConnection($database, $host, $user, $password)
 {
 if (!self::$instance) {
  return self::newConnection($database, $host, $user, $password);
 } elseif ($database . $host . $user != self::$connectionDetails) {

स्वयं :: $ उदाहरण-> क्वेरी ('KILL CONNECTION_ID ()'); आत्म :: $ उदाहरण = अशक्त; स्व वापस करें :: newConnection ($ डेटाबेस, $ होस्ट, $ उपयोगकर्ता, $ पासवर्ड); } स्व वापस :: $ उदाहरण; } अच्छी तरह से पता चला है कि हम हत्या के साथ थोड़ा बहुत पूरी तरह से हो गए हैं और इसलिए पुराने कनेक्शन पर महत्वपूर्ण चीजें करने वाली प्रक्रियाएं कभी भी अपना व्यवसाय समाप्त नहीं कर सकती हैं। इसलिए हमने इन लाइनों को गिरा दिया

  self::$instance->query('KILL CONNECTION_ID()');
  self::$instance = null;

और मशीन के हार्डवेयर और सेटअप के रूप में यह अनुमति देता है कि हमने सर्वर पर अनुमत कनेक्शनों की संख्या को जोड़कर बढ़ा दिया है

max_connections = 500

हमारे कॉन्फ़िगरेशन फ़ाइल के लिए। इसने हमारी समस्या अभी के लिए ठीक कर दी और हमने mysql कनेक्शन को मारने के बारे में कुछ सीखा।


-5

यदि आप जानते हैं कि आप कुछ समय के लिए ऑफ़लाइन हो रहे हैं, तो आप अपना कनेक्शन बंद कर सकते हैं, अपनी प्रोसेसिंग कर सकते हैं, फिर से जुड़ सकते हैं और अपनी रिपोर्ट लिख सकते हैं।


2
यह वास्तव में एक व्यवहार्य उत्तर है, क्योंकि MySQL आठ घंटे के बाद निष्क्रिय कनेक्शन को बंद कर देता है।
बोजन ह्रणकस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.