यह आलेख वर्णन करता है कि MySQL तालिकाओं और डेटाबेस को कैसे सुधारें। जैसे-जैसे डेटाबेस की तालिकाएँ बढ़ती हैं, समय-समय पर त्रुटियाँ हो सकती हैं। जब वे ऐसा करते हैं, तो MySQL में कई उपकरण शामिल होते हैं जिनका उपयोग आप डेटाबेस तालिकाओं की जांच और मरम्मत के लिए कर सकते हैं। ऐसा करने के लिए, नीचे दी गई प्रक्रियाओं का उस क्रम में पालन करें जिसमें वे दिखाई देते हैं।
यह लेख केवल अनुच्छेद विवरण . में सूचीबद्ध उत्पादों पर लागू होता है साइडबार इन प्रक्रियाओं का पालन करने के लिए आपके पास सर्वर तक रूट पहुंच होनी चाहिए।चरण 1:डेटाबेस का बैकअप लेना
इससे पहले कि आप किसी डेटाबेस को सुधारने का प्रयास करें, आपको पहले उसका बैकअप लेना चाहिए। अपने सभी डेटाबेस से सभी फाइलों का बैकअप लेने के लिए, इन चरणों का पालन करें:
- SSH का उपयोग करके अपने सर्वर में लॉग इन करें।
- अपने Linux वितरण के लिए उपयुक्त कमांड का उपयोग करके MySQL सर्वर को रोकें:
- CentOS और Fedora के लिए, टाइप करें:
service mysqld stop
-
डेबियन और उबंटू के लिए, टाइप करें:
service mysql stop
- CentOS और Fedora के लिए, टाइप करें:
-
निम्न आदेश टाइप करें:
cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
यह आदेश वर्तमान समय के आधार पर आपके सभी डेटाबेस से सभी फाइलों को एक निर्देशिका नाम में कॉपी करता है (अधिक सटीक रूप से, 1 जनवरी, 1970 से बीता हुआ सेकंड की संख्या)। यह सुनिश्चित करता है कि प्रत्येक डेटाबेस बैकअप एक निर्देशिका में संग्रहीत किया जाता है जिसमें एक अद्वितीय नाम होता है। अतिरिक्त सुरक्षा के लिए, आप डेटाबेस फ़ाइलों को सर्वर पर नहीं किसी दूरस्थ स्थान पर बैकअप (और चाहिए) कर सकते हैं। -
अपने Linux वितरण के लिए उपयुक्त कमांड का उपयोग करके MySQL सर्वर को पुनरारंभ करें:
- CentOS और Fedora के लिए, टाइप करें:
service mysqld start
-
डेबियन और उबंटू के लिए, टाइप करें:
service mysql start
- CentOS और Fedora के लिए, टाइप करें:
चरण 2:mysqlcheck चलाना
अपने डेटाबेस का बैकअप लेने के बाद, आप समस्या निवारण शुरू करने के लिए तैयार हैं। mysqlcheck प्रोग्राम आपको MySQL के चलने के दौरान डेटाबेस की जाँच और मरम्मत करने में सक्षम बनाता है। यह सुविधा तब उपयोगी होती है जब आप संपूर्ण MySQL सेवा को रोके बिना डेटाबेस पर काम करना चाहते हैं।
इसके अतिरिक्त, mysqlcheck उन तालिकाओं पर काम करता है जो MyISAM या InnoDB डेटाबेस इंजन का उपयोग करते हैं।
डेटाबेस तालिका किस संग्रहण इंजन का उपयोग कर रही है, यह निर्धारित करने के तरीके के बारे में जानकारी के लिए, कृपया यह आलेख देखें।mysqlcheck का उपयोग करने के लिए , इन चरणों का पालन करें:
- रूट उपयोगकर्ता के रूप में, निम्न कमांड टाइप करें:
cd /var/lib/mysql
-
डेटाबेस को उस डेटाबेस के नाम से प्रतिस्थापित करते हुए, जिसे आप जांचना चाहते हैं, निम्न कमांड टाइप करें:
mysqlcheck database
पिछला कमांड निर्दिष्ट डेटाबेस में सभी तालिकाओं की जाँच करता है। वैकल्पिक रूप से, डेटाबेस में किसी विशिष्ट तालिका की जाँच करने के लिए, निम्न कमांड टाइप करें। डेटाबेस को डेटाबेस के नाम से बदलें, और तालिका को उस तालिका के नाम से बदलें जिसे आप जाँचना चाहते हैं:
mysqlcheck database table
-
माइस्क्लचेक निर्दिष्ट डेटाबेस और तालिकाओं की जाँच करता है। यदि कोई तालिका चेक पास कर लेती है, तो mysqlcheck प्रदर्शित करता है ठीक मेज के लिए। हालांकि, अगर mysqlcheck किसी तालिका के लिए त्रुटि की रिपोर्ट करता है, इसे सुधारने का प्रयास करने के लिए निम्न आदेश टाइप करें। डेटाबेस को डेटाबेस नाम से बदलें, और तालिका को तालिका नाम से बदलें:
mysqlcheck -r database table
- अगर mysqlcheck तालिका या तालिकाओं की सफलतापूर्वक मरम्मत नहीं कर सकता, निम्न प्रक्रिया पर जाएँ।
चरण 3:इंजन-विशिष्ट निदान चलाना
अगर चल रहा है mysqlcheck समस्या को ठीक नहीं करता है, अगला चरण डेटाबेस तालिका या तालिकाओं द्वारा उपयोग किए जाने वाले इंजन के लिए विशिष्ट निदान चलाना है। अपनी तालिका के डेटाबेस संग्रहण इंजन के लिए नीचे दी गई उपयुक्त प्रक्रिया का पालन करें।
आपकी डेटाबेस तालिकाएँ किस संग्रहण इंजन का उपयोग कर रही हैं, यह निर्धारित करने के तरीके के बारे में जानकारी के लिए, कृपया यह आलेख देखें।MyISAM टेबल को myisamchk से रिपेयर करना
यदि आप तालिका के लिए MyISAM संग्रहण इंजन का उपयोग कर रहे हैं, तो आप myisamchk चला सकते हैं इसे सुधारने का कार्यक्रम। ऐसा करने के लिए, इन चरणों का पालन करें:
myisamchk प्रोग्राम केवल उन तालिकाओं के लिए काम करता है जो MyISAM स्टोरेज इंजन का उपयोग करते हैं। यह InnoDB इंजन के लिए काम नहीं करता है।- अपने Linux वितरण के लिए उपयुक्त कमांड का उपयोग करके MySQL सर्वर को रोकें:
- CentOS और Fedora के लिए, टाइप करें:
service mysqld stop
-
डेबियन और उबंटू के लिए, टाइप करें:
service mysql stop
- CentOS और Fedora के लिए, टाइप करें:
-
निम्न आदेश टाइप करें:
cd /var/lib/mysql
- उस निर्देशिका में बदलें जहां डेटाबेस स्थित है। उदाहरण के लिए, यदि डेटाबेस का नाम ग्राहक है , सीडी ग्राहक टाइप करें।
-
निम्न आदेश टाइप करें, तालिका को उस तालिका के नाम से बदलें जिसे आप जांचना चाहते हैं:
myisamchk table
डेटाबेस में सभी तालिकाओं की जाँच करने के लिए, निम्न कमांड टाइप करें:
myisamchk *.MYI
यदि पिछला आदेश काम नहीं करता है, तो आप अस्थायी फ़ाइलों को हटाने का प्रयास कर सकते हैं जो myisamchk को रोक सकती हैं। सही ढंग से चलने से। ऐसा करने के लिए, वापस /var/lib/mysql . में बदलें निर्देशिका, और फिर निम्न आदेश टाइप करें:
ls */*.TMD
यदि कोई .TMD फ़ाइलें सूचीबद्ध हैं, तो उन्हें हटाने के लिए निम्न आदेश टाइप करें:
rm */*.TMD
फिर myisamchk . चलाने का प्रयास करें फिर से।
-
किसी तालिका को सुधारने का प्रयास करने के लिए, तालिका . के स्थान पर निम्न आदेश टाइप करें उस तालिका के नाम के साथ जिसे आप सुधारना चाहते हैं:
myisamchk --recover table
-
अपने Linux वितरण के लिए उपयुक्त कमांड का उपयोग करके MySQL सर्वर को पुनरारंभ करें:
- CentOS और Fedora के लिए, टाइप करें:
service mysqld start
-
डेबियन और उबंटू के लिए, टाइप करें:
service mysql start
- CentOS और Fedora के लिए, टाइप करें:
- मरम्मत की गई तालिका या तालिकाओं का परीक्षण करें।
InnoDB पुनर्प्राप्ति प्रक्रिया चलाना
यदि आप डेटाबेस तालिका के लिए InnoDB संग्रहण इंजन का उपयोग कर रहे हैं, तो आप InnoDB पुनर्प्राप्ति प्रक्रिया चला सकते हैं। ऐसा करने के लिए, इन चरणों का पालन करें:
- my.cnf . खोलने के लिए अपने पसंदीदा टेक्स्ट एडिटर का उपयोग करें अपने सर्वर पर फ़ाइल। my.cnf . का स्थान फ़ाइल आपके Linux वितरण पर निर्भर करती है:
- CentOS और Fedora पर, my.cnf फ़ाइल /etc . में स्थित है निर्देशिका।
- डेबियन और उबंटू पर, my.cnf फ़ाइल /etc/mysql . में स्थित है निर्देशिका।
- my.cnf . में फ़ाइल, [mysqld] . का पता लगाएं अनुभाग।
-
निम्न पंक्ति को [mysqld] . में जोड़ें खंड:
innodb_force_recovery=4
-
परिवर्तनों को my.cnf . में सहेजें फ़ाइल, और फिर अपने Linux वितरण के लिए उपयुक्त कमांड का उपयोग करके MySQL सर्वर को पुनरारंभ करें:
- CentOS और Fedora के लिए, टाइप करें:
service mysqld restart
-
डेबियन और उबंटू के लिए, टाइप करें:
service mysql restart
- CentOS और Fedora के लिए, टाइप करें:
-
सभी डेटाबेस को databases.sql . में निर्यात करने के लिए निम्न कमांड टाइप करें फ़ाइल:
mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
-
mysql प्रारंभ करें प्रोग्राम, और फिर DROP DATABASE . का उपयोग करके प्रभावित डेटाबेस या डेटाबेस को छोड़ने का प्रयास करें आज्ञा।
यदि MySQL किसी डेटाबेस को छोड़ने में असमर्थ है, तो आप MySQL सर्वर को बंद करने के बाद नीचे चरण 8 में इसे मैन्युअल रूप से हटा सकते हैं।
-
अपने Linux वितरण के लिए उपयुक्त कमांड का उपयोग करके MySQL सर्वर को रोकें:
- CentOS और Fedora के लिए, टाइप करें:
service mysqld stop
-
डेबियन और उबंटू के लिए, टाइप करें:
service mysql stop
- CentOS और Fedora के लिए, टाइप करें:
-
यदि आप चरण 6 में डेटाबेस को छोड़ने में असमर्थ थे, तो इसे मैन्युअल रूप से हटाने के लिए निम्न आदेश टाइप करें। डेटाबेस को उस डेटाबेस के नाम से बदलें जिसे आप हटाना चाहते हैं:
cd /var/lib/mysql rm -rf database
सुनिश्चित करें कि आप mysql . को नहीं हटाते हैं या performance_schema निर्देशिका! -
my.cnf . खोलने के लिए अपने पसंदीदा टेक्स्ट एडिटर का उपयोग करें अपने सर्वर पर फ़ाइल करें, और फिर [mysqld] . में निम्न पंक्ति पर टिप्पणी करें अनुभाग जैसा दिखाया गया है:
#innodb_force_recovery=4
यह InnoDB पुनर्प्राप्ति मोड को अक्षम कर देता है। -
परिवर्तनों को my.cnf . में सहेजें फ़ाइल, और फिर अपने Linux वितरण के लिए उपयुक्त कमांड का उपयोग करके MySQL सर्वर प्रारंभ करें:
- CentOS और Fedora के लिए, टाइप करें:
service mysqld start
-
डेबियन और उबंटू के लिए, टाइप करें:
service mysql start
- CentOS और Fedora के लिए, टाइप करें:
-
चरण 5 में आपके द्वारा बनाई गई बैकअप फ़ाइल से डेटाबेस को पुनर्स्थापित करने के लिए निम्न आदेश टाइप करें:
mysql < databases.sql
- पुनर्स्थापित डेटाबेस का परीक्षण करें।
अधिक जानकारी
- mysqlcheck के बारे में अधिक जानकारी के लिए , कृपया देखें https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html।
- myisamchk . के बारे में अधिक जानकारी के लिए , कृपया देखें https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html।