एक बार में सभी तालिकाओं की मरम्मत करें


112

डेटाबेस में सभी तालिकाओं को एक बार में कैसे जांचें?

check table ''tablename'';एक-एक करके सभी तालिकाओं के लिए क्वेरी टाइप करने के बजाय ।

क्या कोई सरल आदेश है check allया ऐसा कुछ भी है?

जवाबों:



108

आदेश यह है:

mysqlcheck -u root -p --auto-repair --check --all-databases

जब आपसे पूछा जाए तो आपको पासवर्ड की आपूर्ति करनी चाहिए,

या आप इसे चला सकते हैं लेकिन यह अनुशंसित नहीं है क्योंकि पासवर्ड स्पष्ट पाठ में लिखा गया है:

mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases

7
mysqlcheck -u root -p --auto-repair --check --optimize --all-डेटाबेस त्रुटि: mysqlcheck कई विरोधाभासी आदेशों का समर्थन नहीं करता
Alekc

11
यदि आपको विरोधाभासी कमांड त्रुटि मिलती है, तो --optimize विकल्प निकालें।
सरकास्टरन

मुझे लगता है कि आपको इनमें से केवल एक विकल्प का उपयोग करना होगा: ऑटो-रिपेयर, चेक या ऑप्टिमाइज़। मैं केवल ऑटो-मरम्मत का इस्तेमाल किया और काम किया
पैकेट ट्रेसर

मैंने कोशिश की कि आपने क्या कहा लेकिन मुझे मिलता है: mysqlcheck: Got error: 1045: कनेक्ट करने की कोशिश करते समय उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' (पासवर्ड का उपयोग करना: YES) से इनकार किया और मुझे पता है कि मैं सही पासवर्ड का उपयोग कर रहा हूं।
डग

24

REPAIRएक डेटाबेस के अंदर सभी तालिकाओं के लिए SQL मूर्तियों को मुद्रित करने के लिए निम्नलिखित क्वेरी का उपयोग करें :

select concat('REPAIR TABLE ', table_name, ';') from information_schema.tables 
where table_schema='mydatabase'; 

इसके बाद सभी प्रश्नों को कॉपी करें और उस पर अमल करें mydatabase

नोट: mydatabaseवांछित DB नाम से प्रतिस्थापित करें


9

पासवर्ड टाइप करने की आवश्यकता नहीं है, बस इनमें से किसी भी एक कमांड का उपयोग करें (आत्म व्याख्यात्मक):

mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize

8

निम्न कमांड ने विंडोज में कमांड प्रॉम्प्ट (एक प्रशासक के रूप में) का उपयोग करके मेरे लिए काम किया:

mysqlcheck -u root -p -A --auto-repair

रूट उपयोगकर्ता के साथ mysqlcheck चलाएं, पासवर्ड के लिए संकेत दें, सभी डेटाबेस की जांच करें, और किसी भी दूषित तालिकाओं को ऑटो-मरम्मत करें।


3

ऐसा करने के लिए कोई डिफ़ॉल्ट आदेश नहीं है, लेकिन आप कार्य करने के लिए एक प्रक्रिया बना सकते हैं। यह पंक्तियों के माध्यम से पुनरावृति करेगा information_schemaऔर REPAIR TABLE 'tablename';हर पंक्ति के लिए कॉल करेगा । CHECK TABLEअभी तक तैयार बयानों के लिए समर्थित नहीं है। यहाँ उदाहरण है (अपने डेटाबेस नाम के साथ MYDATABASE बदलें):

CREATE DEFINER = 'root'@'localhost'
PROCEDURE MYDATABASE.repair_all()
BEGIN
  DECLARE endloop INT DEFAULT 0;
  DECLARE tableName char(100);
  DECLARE rCursor CURSOR FOR SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA`=DATABASE();
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET endloop=1;

  OPEN rCursor;
  FETCH rCursor INTO tableName;

  WHILE endloop = 0 DO
    SET @sql = CONCAT("REPAIR TABLE `", tableName, "`");
    PREPARE statement FROM @sql;
    EXECUTE statement;

    FETCH rCursor INTO tableName;
  END WHILE;

  CLOSE rCursor;
END

1

मुझे शेल से एक साधारण जांच के लिए यह पसंद है:

mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE 'User%'" \
| awk 'NR != 1 {print "CHECK TABLE "$1";"}' \
| mysql -p<password> -D<database>

1
आप mysql -ssआउटपुट से हटाए गए कॉलम नामों को बनाने के लिए उपयोग कर सकते हैं - यह NR != 1आपके कोड से हटाने की अनुमति देगा
शराबी

1

मेजबानों के लिए, इनमें से एक को करना चाहिए: (दोनों एक ही करते हैं)

mysqlrepair -uadmin -p$(cat /etc/psa/.psa.shadow) -A
# or
mysqlcheck -uadmin -p$(cat /etc/psa/.psa.shadow) --repair -A

1

आपको उपयोगकर्ता नाम और पासवर्ड की आवश्यकता हो सकती है:

mysqlcheck -A --auto-repair -uroot -p

आपको पासवर्ड के लिए कहा जाएगा।

mysqlcheck -A --auto-repair -uroot -p{{password here}}

यदि आप क्रोन में डालना चाहते हैं, लेकिन अपना पासवर्ड सादे पाठ में दिखाई देगा!


1

यदि दूषित तालिकाओं के बाद रहते हैं

mysqlcheck -A --auto-repair

प्रयत्न

mysqlcheck -A --auto-repair --use-frm

-use-frm क्या करता है?
द्विविदमान

--use-frm MyISAM तालिकाओं पर मरम्मत कार्यों के लिए, डेटा डिक्शनरी से तालिका संरचना प्राप्त करें ताकि टेबल की मरम्मत की जा सके, भले ही .MYI हैडर दूषित हो। (सीएफ dev.mysql.com/doc/refman/8.0/en/... )
Laloi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.