Yanıtlar:
komut satırından şunları kullanabilirsiniz:
mysqlcheck -A --auto-repair
Komut şudur:
mysqlcheck -u root -p --auto-repair --check --all-databases
İstendiğinde şifreyi girmelisiniz,
veya bunu çalıştırabilirsiniz, ancak şifre açık metin olarak yazıldığı için önerilmez:
mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases
REPAIRBir veritabanı içindeki tüm tablolar için SQL durumlarını yazdırmak için aşağıdaki sorguyu kullanın :
select concat('REPAIR TABLE ', table_name, ';') from information_schema.tables
where table_schema='mydatabase';
Bundan sonra tüm sorguları kopyalayın ve çalıştırın mydatabase.
Not: mydatabaseistenen DB adıyla değiştirin
Parolayı yazmanıza gerek yok, sadece şu komutlardan herhangi birini kullanın (kendinden açıklamalı):
mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize
Aşağıdaki komut, Windows'ta komut istemini (Yönetici olarak) kullanarak benim için çalıştı:
mysqlcheck -u root -p -A --auto-repair
Mysqlcheck'i root kullanıcısıyla çalıştırın, parola isteyin, tüm veritabanlarını kontrol edin ve bozuk tabloları otomatik olarak onarın.
Bunu yapmak için varsayılan bir komut yoktur, ancak işi yapmak için bir prosedür oluşturabilirsiniz. Satırları yineler information_schemave REPAIR TABLE 'tablename';her satır için çağrı yapar. CHECK TABLEhenüz hazırlanmış ifadeler için desteklenmemektedir. İşte örnek (MYDATABASE'i veritabanı adınızla değiştirin):
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
Kabuktan basit bir kontrol için bunu beğendim:
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çıkışından atlanmış sütun adları yapmak - Bu kaldırmak için izin verecek NR != 1kodunuzdan
Kullanıcı adı ve şifreye ihtiyacınız olabilir:
mysqlcheck -A --auto-repair -uroot -p
Şifre girmeniz istenecektir.
mysqlcheck -A --auto-repair -uroot -p{{password here}}
Eğer cron eklemek istiyorsanız, AMA şifreniz düz metin olarak görünecektir!
Bozuk tablolar sonra kalırsa
mysqlcheck -A --auto-repair
Deneyin
mysqlcheck -A --auto-repair --use-frm