Tüm tabloları tek seferde onarın


112

Veritabanındaki tüm tablolar tek seferde nasıl kontrol edilir?

check table ''tablename'';Tüm tablolar için tek tek sorgu yazmak yerine .

Bunun gibi basit bir komut check allvar mı?

Yanıtlar:



108

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

7
mysqlcheck -u root -p --auto-repair --check --optimize --all-databases Hata: mysqlcheck birden fazla çelişen komutu desteklemiyor
Alekc

11
Eğer çelişen komutlar hatası alırsanız, --optimize seçeneğini kaldırın.
Sarcastron

sanırım şu seçeneklerden birini kullanmanız gerekiyor: otomatik onarım, kontrol etme veya optimize etme. Yalnızca otomatik onarım kullandım ve çalıştım
Packet Tracer

Söylediğini denedim ama şunu alıyorum: mysqlcheck: Hata aldım: 1045: Bağlanmaya çalışırken 'root' @ 'localhost' kullanıcısı için erişim reddedildi (şifre kullanarak: YES) ve doğru şifreyi kullandığımı biliyorum.
Doug

24

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


9

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

8

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.


3

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

1

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>

1
Kullanabileceğiniz mysql -ssçıkışından atlanmış sütun adları yapmak - Bu kaldırmak için izin verecek NR != 1kodunuzdan
Fluffy'yi

1

plesk konakları için şunlardan biri yapmalıdır: (ikisi de aynı şeyi yapar)

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

1

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!


1

Bozuk tablolar sonra kalırsa

mysqlcheck -A --auto-repair

Deneyin

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

-use-frm ne yapar?
davidman77

--use-frm MyISAM tablolarındaki onarım işlemleri için, tablo yapısını veri sözlüğünden alın, böylece tablo .MYI başlığı bozuk olsa bile onarılabilir. (cf. dev.mysql.com/doc/refman/8.0/en/… )
Laloi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.