जवाबों:
कमांड लाइन से आप उपयोग कर सकते हैं:
mysqlcheck -A --auto-repair
आदेश यह है:
mysqlcheck -u root -p --auto-repair --check --all-databases
जब आपसे पूछा जाए तो आपको पासवर्ड की आपूर्ति करनी चाहिए,
या आप इसे चला सकते हैं लेकिन यह अनुशंसित नहीं है क्योंकि पासवर्ड स्पष्ट पाठ में लिखा गया है:
mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases
REPAIR
एक डेटाबेस के अंदर सभी तालिकाओं के लिए SQL मूर्तियों को मुद्रित करने के लिए निम्नलिखित क्वेरी का उपयोग करें :
select concat('REPAIR TABLE ', table_name, ';') from information_schema.tables
where table_schema='mydatabase';
इसके बाद सभी प्रश्नों को कॉपी करें और उस पर अमल करें mydatabase
।
नोट: mydatabase
वांछित DB नाम से प्रतिस्थापित करें
पासवर्ड टाइप करने की आवश्यकता नहीं है, बस इनमें से किसी भी एक कमांड का उपयोग करें (आत्म व्याख्यात्मक):
mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize
निम्न कमांड ने विंडोज में कमांड प्रॉम्प्ट (एक प्रशासक के रूप में) का उपयोग करके मेरे लिए काम किया:
mysqlcheck -u root -p -A --auto-repair
रूट उपयोगकर्ता के साथ mysqlcheck चलाएं, पासवर्ड के लिए संकेत दें, सभी डेटाबेस की जांच करें, और किसी भी दूषित तालिकाओं को ऑटो-मरम्मत करें।
ऐसा करने के लिए कोई डिफ़ॉल्ट आदेश नहीं है, लेकिन आप कार्य करने के लिए एक प्रक्रिया बना सकते हैं। यह पंक्तियों के माध्यम से पुनरावृति करेगा 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
मुझे शेल से एक साधारण जांच के लिए यह पसंद है:
mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE 'User%'" \
| awk 'NR != 1 {print "CHECK TABLE "$1";"}' \
| mysql -p<password> -D<database>
mysql -ss
आउटपुट से हटाए गए कॉलम नामों को बनाने के लिए उपयोग कर सकते हैं - यह NR != 1
आपके कोड से हटाने की अनुमति देगा
आपको उपयोगकर्ता नाम और पासवर्ड की आवश्यकता हो सकती है:
mysqlcheck -A --auto-repair -uroot -p
आपको पासवर्ड के लिए कहा जाएगा।
mysqlcheck -A --auto-repair -uroot -p{{password here}}
यदि आप क्रोन में डालना चाहते हैं, लेकिन अपना पासवर्ड सादे पाठ में दिखाई देगा!
यदि दूषित तालिकाओं के बाद रहते हैं
mysqlcheck -A --auto-repair
प्रयत्न
mysqlcheck -A --auto-repair --use-frm