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


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

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

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

1. स्थानीय MySQL सर्वर से कनेक्ट नहीं किया जा सकता

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

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

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

$ 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

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

$ sudo netstat -tlpn | grep "mysql"

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)

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

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 से जुड़ने की समस्याओं का परिणाम हो सकता है, पहले बताई गई त्रुटियों को देखें।

4. MySQL सर्वर से कनेक्शन खो गया

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

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

[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

6. मेमोरी MySQL से बाहर

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

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

  • if you are using MySQL client directly, start it with --quick switch, to disable cached results or
  • if you are using the MyODBC driver, the configuration user interface (UI) has an advanced tab for flags. Check “Do not cache result“.

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

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

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

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. The first and most important step is to look into the MySQL logs which are stored in the directory /var/log/mysql/. You can use command line utilities such as tail to read through the log files.
  2. If MySQL service fails to start, check its status using systemctl or use the journetctl (with the -xe flag) command under systemd to examine the problem.
  3. You can also examine system log file such as /var/log/messages or similar for reasons for your problem.
  4. Try using tools such as Mytop, glances, top, ps, or htop to check which program is taking all CPU or is locking the machine or to inspect whether you are running out of memory, disk space, file descriptors, or some other important resource.
  5. Assuming that problem is some runaway process, you can always try to kill it (using the pkill or kill utility) so that MySQL works normally.
  6. Supposing that the mysqld server is causing problems, you can run the command: mysqladmin -u root ping or mysqladmin -u root processlist to get any response from it.
  7. If the problem is with your client program while trying to connect to the MySQL server, check why it is not working fine, try to get any output from it for troubleshooting purposes.

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

  1. Learn MySQL / MariaDB for Beginners – Part 1
  2. How to Monitor MySQL/MariaDB Databases using Netdata on CentOS 7
  3. How to Transfer All MySQL Databases From Old to New Server
  4. Mytop – A Useful Tool for Monitoring MySQL/MariaDB Performance in Linux
  5. 12 MySQL/MariaDB Security Best Practices for Linux

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