Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में सामान्य त्रुटियों का निवारण करने के लिए उपयोगी टिप्स

MySQL व्यापक रूप से उपयोग किया जाने वाला ओपन सोर्स रिलेशनल डेटाबेस मैनेजमेंट सिस्टम है (RDMS ) Oracle . के स्वामित्व में है . यह वर्षों से वेब-आधारित अनुप्रयोगों के लिए डिफ़ॉल्ट विकल्प रहा है और अभी भी अन्य डेटाबेस इंजनों की तुलना में लोकप्रिय बना हुआ है।

MySQL वेब अनुप्रयोगों के लिए डिज़ाइन और अनुकूलित किया गया था - यह प्रमुख वेब-आधारित अनुप्रयोगों जैसे कि Facebook का एक अभिन्न अंग है। , ट्विटर , विकिपीडिया , यूट्यूब , और कई अन्य।

क्या आपकी साइट या वेब एप्लिकेशन MySQL द्वारा संचालित है ? इस विस्तृत लेख में, हम समझाएंगे कि MySQL . में समस्याओं और सामान्य त्रुटियों का निवारण कैसे करें डेटाबेस सर्वर। हम वर्णन करेंगे कि समस्याओं के कारणों को कैसे निर्धारित किया जाए और उन्हें हल करने के लिए क्या किया जाए।

<एच3>1. स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता

MySQL में सर्वर कनेक्शन त्रुटियों के लिए सामान्य क्लाइंट में से एक है "ERROR 2002 (HY000):सॉकेट के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता '/var/run/mysqld/mysqld.sock' (2) .

यह त्रुटि इंगित करती है कि कोई MySQL नहीं है सर्वर (mysqld) होस्ट सिस्टम पर चल रहा है या आपने गलत यूनिक्स सॉकेट फ़ाइल नाम निर्दिष्ट किया है या TCP/IP सर्वर से कनेक्ट करने का प्रयास करते समय पोर्ट करें।

mysqld . नाम की प्रक्रिया की जांच करके सुनिश्चित करें कि सर्वर चल रहा है अपने डेटाबेस सर्वर पर ps कमांड और grep कमांड का एक साथ उपयोग करके होस्ट करें जैसा कि दिखाया गया है।

$ ps xa | grep mysqld | grep -v mysqld

यदि उपरोक्त आदेश कोई आउटपुट नहीं दिखाते हैं, तो डेटाबेस सर्वर नहीं चल रहा है। इसलिए ग्राहक इससे कनेक्ट नहीं हो पा रहा है। सर्वर शुरू करने के लिए, निम्न systemctl कमांड चलाएँ।

$ sudo systemctl start mysql        #Debian/Ubuntu
$ sudo systemctl start mysqld       #RHEL/CentOS/Fedora

MySQL को सत्यापित करने के लिए सेवा की स्थिति, निम्न आदेश का उपयोग करें।

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

उपरोक्त कमांड के आउटपुट से, MySQL सेवा विफल रही है। ऐसी स्थिति में, आप इसे पुनः आरंभ करने का प्रयास कर सकते हैं और एक बार फिर इसकी स्थिति की जांच कर सकते हैं।

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

इसके अतिरिक्त, यदि सर्वर निम्न आदेश द्वारा दिखाए गए अनुसार चल रहा है, लेकिन आपको अभी भी उपरोक्त त्रुटि दिखाई दे रही है, तो आपको यह भी सत्यापित करना चाहिए कि TCP/IP पोर्ट को फ़ायरवॉल या किसी पोर्ट ब्लॉकिंग सेवा द्वारा अवरुद्ध किया गया है।

$ ps xa | grep mysqld | grep -v mysqld

सर्वर जिस पोर्ट पर सुन रहा है उसे खोजने के लिए, दिखाए गए अनुसार netstat कमांड का उपयोग करें।

$ sudo netstat -tlpn | grep "mysql"
<एच3>2. MySQL सर्वर से कनेक्ट नहीं हो सकता

एक और आम तौर पर सामने आई कनेक्शन त्रुटि है "(2003) 'सर्वर' (10061) पर MySQL सर्वर से कनेक्ट नहीं हो सकता ”, जिसका अर्थ है कि नेटवर्क कनेक्शन अस्वीकार कर दिया गया है।

यहां, यह जांच कर प्रारंभ करें कि एक MySQL है सर्वर सिस्टम पर चल रहा है जैसा कि ऊपर दिखाया गया है। यह भी सुनिश्चित करें कि सर्वर में नेटवर्क कनेक्शन सक्षम हैं और जिस नेटवर्क पोर्ट को आप कनेक्ट करने के लिए उपयोग कर रहे हैं वह सर्वर पर कॉन्फ़िगर किया गया है।

जब आप MySQL सर्वर से कनेक्ट करने का प्रयास करते हैं तो आपके सामने आने वाली अन्य सामान्य त्रुटियां हैं:

ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
के जरिए स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता

ये त्रुटियां इंगित करती हैं कि सर्वर चल रहा है, हालांकि, आप TCP/IP का उपयोग करके कनेक्ट करने का प्रयास कर रहे हैं पोर्ट, नामित पाइप, या यूनिक्स सॉकेट फ़ाइल उस फ़ाइल से भिन्न है जिस पर सर्वर सुन रहा है।

<एच3>3. MySQL में एक्सेस अस्वीकृत त्रुटियाँ

MySQL . में , एक उपयोगकर्ता खाते को उपयोगकर्ता नाम . के रूप में परिभाषित किया जाता है और क्लाइंट होस्ट या होस्ट जिससे उपयोगकर्ता सर्वर से जुड़ सकता है। इसके अलावा, किसी खाते में पासवर्ड जैसे प्रमाणीकरण क्रेडेंशियल भी हो सकते हैं।

हालांकि "पहुंच से वंचित . के कई अलग-अलग कारण हैं "त्रुटियां, सामान्य कारणों में से एक MySQL खातों से संबंधित है जो सर्वर क्लाइंट प्रोग्राम को कनेक्ट करते समय उपयोग करने की अनुमति देता है। यह इंगित करता है कि उपयोगकर्ता नाम कनेक्शन में निर्दिष्ट के पास डेटाबेस तक पहुँचने का विशेषाधिकार नहीं है।

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

SHOW GRANTS . चलाकर आप देख सकते हैं कि किसी दिए गए खाते में क्या विशेषाधिकार हैं दिखाए गए अनुसार आदेश।

> SHOW GRANTS FOR 'tecmint'@'localhost';

आप MySQL शेल में निम्न कमांड का उपयोग करके रिमोट आईपी एड्रेस पर विशिष्ट डेटाबेस पर किसी विशेष उपयोगकर्ता को विशेषाधिकार प्रदान कर सकते हैं।

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

इसके अलावा, पहुंच अस्वीकृत त्रुटियां MySQL से कनेक्ट होने में समस्या के परिणामस्वरूप भी हो सकता है, पहले बताई गई त्रुटियों को देखें।

<एच3>4. MySQL सर्वर से कनेक्शन टूट गया

आपको निम्न में से किसी एक कारण से यह त्रुटि आ सकती है:खराब नेटवर्क कनेक्टिविटी , कनेक्शन टाइमआउट या बीएलओबी के साथ कोई समस्या मान जो max_allowed_packet . से बड़े हैं . नेटवर्क कनेक्शन की समस्या के मामले में, सुनिश्चित करें कि आपके पास एक अच्छा नेटवर्क कनेक्शन है, खासकर यदि आप एक दूरस्थ डेटाबेस सर्वर तक पहुँच रहे हैं।

अगर यह कनेक्शन टाइमआउट है समस्या, खासकर जब MySQL सर्वर से प्रारंभिक कनेक्शन का उपयोग करने का प्रयास कर रहा है, connect_timeout . का मान बढ़ाएं पैरामीटर। लेकिन BLOB मान . के मामले में जो max_allowed_packet . से बड़े हैं , आपको max_allowed_packet . के लिए एक उच्च मान सेट करना होगा आपके /etc/my.cnf . में [mysqld] . के अंतर्गत कॉन्फ़िगरेशन फ़ाइल या [client] अनुभाग जैसा दिखाया गया है।

[mysqld]
connect_timeout=100
max_allowed_packet=500M

अगर MySQL कॉन्फ़िगरेशन फ़ाइल आपके लिए सुलभ नहीं है, तो आप MySQL शेल में निम्न कमांड का उपयोग करके इस मान को सेट कर सकते हैं।

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

5. बहुत अधिक MySQL कनेक्शन

मामले में MySQL क्लाइंट का सामना “बहुत अधिक कनेक्शन . से होता है "त्रुटि, इसका मतलब है कि सभी उपलब्ध कनेक्शन अन्य क्लाइंट द्वारा उपयोग में हैं। कनेक्शनों की संख्या (डिफ़ॉल्ट 151 . है ) max_connections . द्वारा नियंत्रित किया जाता है प्रणाली चर; आप अपने /etc/my.cnf में अधिक कनेक्शन की अनुमति देने के लिए इसका मूल्य बढ़ाकर समस्या का समाधान कर सकते हैं कॉन्फ़िगरेशन फ़ाइल।

[mysqld]
max_connections=1000
<एच3>6. मेमोरी से बाहर है MySQL

यदि आप MySQL . का उपयोग करके कोई क्वेरी चलाते हैं क्लाइंट प्रोग्राम और प्रश्न में त्रुटि का सामना करते हैं, इसका मतलब है कि MySQL के पास संपूर्ण क्वेरी परिणाम को संग्रहीत करने के लिए पर्याप्त मेमोरी नहीं है।

पहला कदम यह सुनिश्चित करना है कि क्वेरी सही है, यदि है, तो निम्न कार्य करें:

  • यदि आप सीधे MySQL क्लाइंट का उपयोग कर रहे हैं, तो इसे --quick switch से शुरू करें , संचित परिणामों को अक्षम करने के लिए या
  • यदि आप MyODBC . का उपयोग कर रहे हैं ड्राइवर, कॉन्फ़िगरेशन यूजर इंटरफेस (यूआई) में झंडे के लिए एक उन्नत टैब है। चेक "परिणाम कैश न करें ".

एक और बढ़िया टूल है, MySQL ट्यूनर - एक उपयोगी स्क्रिप्ट जो चल रहे MySQL सर्वर से कनेक्ट होगी और यह सुझाव देती है कि इसे उच्च प्रदर्शन के लिए कैसे कॉन्फ़िगर किया जा सकता है।

$ sudo apt-get install mysqltuner     #Debian/Ubuntu
$ sudo yum install mysqltuner         #RHEL/CentOS/Fedora
$ mysqltuner

MySQL अनुकूलन और प्रदर्शन ट्यूनिंग युक्तियों के लिए, हमारा लेख पढ़ें:15 उपयोगी MySQL/MariaDB प्रदर्शन ट्यूनिंग और अनुकूलन युक्तियाँ।

<एच3>7. MySQL क्रैश होता रहता है

यदि आप इस समस्या का सामना करते हैं, तो आपको यह पता लगाने का प्रयास करना चाहिए कि क्या समस्या यह है कि MySQL सर्वर मर जाता है या क्या इसका क्लाइंट किसी समस्या के साथ है। ध्यान दें कि कई सर्वर क्रैश दूषित डेटा फ़ाइलों या अनुक्रमणिका फ़ाइलों के कारण होते हैं।

आप सर्वर की स्थिति की जांच कर सकते हैं कि यह कितने समय से चालू है और चल रहा है।

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

वैकल्पिक रूप से, MySQL सर्वर के अपटाइम का पता लगाने के लिए निम्न mysqladmin कमांड चलाएँ।

$ sudo mysqladmin version -p 

अन्य समाधानों में MySQL . को रोकना शामिल है, लेकिन इन्हीं तक सीमित नहीं है सर्वर और डिबगिंग सक्षम करना, फिर सेवा फिर से शुरू करें। आप एक परीक्षण केस बनाने का प्रयास कर सकते हैं जिसका उपयोग समस्या को दोहराने के लिए किया जा सकता है। इसके अलावा, एक अतिरिक्त टर्मिनल विंडो खोलें और अपने अन्य प्रश्नों को चलाने के दौरान MySQL प्रक्रिया आँकड़े प्रदर्शित करने के लिए निम्न कमांड चलाएँ:

$ sudo mysqladmin -i 5 status
OR
$ sudo mysqladmin -i 5 -r status 

सबसे महत्वपूर्ण बात:यह निर्धारित करना कि समस्या या त्रुटि का कारण क्या है

हालांकि हमने कुछ सामान्य MySQL . पर ध्यान दिया है समस्याओं और त्रुटियों और समस्या निवारण और उन्हें हल करने के तरीके भी प्रदान किए, एक त्रुटि के निदान के साथ सबसे महत्वपूर्ण बात यह समझना है कि इसका क्या अर्थ है (इसके कारण के संदर्भ में)।

तो आप यह कैसे तय कर सकते हैं? निम्नलिखित बिंदु आपको यह पता लगाने में मार्गदर्शन करेंगे कि वास्तव में समस्या का कारण क्या है:

  1. पहला और सबसे महत्वपूर्ण कदम MySQL लॉग्स को देखना है जो निर्देशिका /var/log/mysql/ में संग्रहीत हैं। . लॉग फ़ाइलों को पढ़ने के लिए आप टेल जैसी कमांड लाइन उपयोगिताओं का उपयोग कर सकते हैं।
  2. यदि MySQL सेवा प्रारंभ करने में विफल रहती है, तो systemctl का उपयोग करके इसकी स्थिति जांचें या journetctl का उपयोग करें (-xe . के साथ फ्लैग) कमांड सिस्टमड के तहत समस्या की जांच करने के लिए।
  3. आप सिस्टम लॉग फ़ाइल की जांच भी कर सकते हैं जैसे /var/log/messages या आपकी समस्या के कारणों के समान।
  4. मायटॉप, ग्लेंस, टॉप, पीएस, या एचटॉप जैसे टूल का उपयोग करके देखें कि कौन सा प्रोग्राम सभी सीपीयू ले रहा है या मशीन को लॉक कर रहा है या यह जांचने के लिए कि क्या आप मेमोरी, डिस्क स्पेस, फाइल डिस्क्रिप्टर, या कुछ से बाहर हो रहे हैं। अन्य महत्वपूर्ण संसाधन।
  5. यह मानते हुए कि समस्या कुछ भगोड़ा प्रक्रिया है, आप हमेशा इसे मारने की कोशिश कर सकते हैं (pkill या किल यूटिलिटी का उपयोग करके) ताकि MySQL सामान्य रूप से काम करे।
  6. मान लीजिए कि mysqld सर्वर समस्या पैदा कर रहा है, आप कमांड चला सकते हैं:mysqladmin -u root ping या mysqladmin -u root processlist इससे कोई प्रतिक्रिया प्राप्त करने के लिए।
  7. यदि समस्या MySQL सर्वर से कनेक्ट करने का प्रयास करते समय आपके क्लाइंट प्रोग्राम के साथ है, तो जांचें कि यह ठीक क्यों काम नहीं कर रहा है, समस्या निवारण उद्देश्यों के लिए इससे कोई आउटपुट प्राप्त करने का प्रयास करें।

आप इन निम्नलिखित MySQL संबंधित लेखों को भी पढ़ना पसंद कर सकते हैं:

  1. शुरुआती के लिए MySQL / MariaDB सीखें - भाग 1
  2. सेंटोस 7 पर नेटडेटा का उपयोग करके MySQL/MariaDB डेटाबेस की निगरानी कैसे करें
  3. सभी MySQL डेटाबेस को पुराने से नए सर्वर में कैसे ट्रांसफर करें
  4. Mytop - Linux में MySQL/MariaDB प्रदर्शन की निगरानी के लिए एक उपयोगी उपकरण
  5. 12 MySQL/MariaDB Linux के लिए सुरक्षा सर्वोत्तम अभ्यास

अधिक जानकारी के लिए, समस्याओं और सामान्य त्रुटियों से संबंधित MySQL संदर्भ मैनुअल से परामर्श करें, यह उन सामान्य समस्याओं और त्रुटि संदेशों को व्यापक रूप से सूचीबद्ध करता है जो MySQL का उपयोग करते समय आपके सामने आ सकते हैं, जिनमें वे भी शामिल हैं जिनकी हमने ऊपर और अधिक चर्चा की है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस पर मीडिया फ़ाइलों को संग्रहीत करने का सबसे अच्छा तरीका क्या है?

  2. लैटिन1 एन्कोडेड कॉलम में UTF-8 वर्णों का पता कैसे लगाएं - MySQL

  3. टाइमज़ोन जानकारी के साथ MySQL में डेटाटाइम कैसे स्टोर करें?

  4. कैसे चुनें तेज करने के लिए .. एकाधिक कॉलम पर MySQL में प्रश्नों की तरह?

  5. MySQL प्रतिकृति में बचने के लिए शीर्ष गलतियाँ