Perbaiki semua tabel sekaligus


112

Bagaimana cara memeriksa semua tabel dalam database sekaligus?

Daripada mengetik kueri check table ''tablename'';untuk semua tabel satu per satu.

Apakah ada perintah sederhana seperti check allatau semacamnya?

Jawaban:



108

Perintahnya adalah ini:

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

Anda harus memberikan kata sandi saat diminta,

atau Anda dapat menjalankan yang ini tetapi tidak disarankan karena kata sandi ditulis dalam teks yang jelas:

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

7
mysqlcheck -u root -p --auto-repair --check --optimize --all-databases Error: mysqlcheck tidak mendukung beberapa perintah yang bertentangan
Alekc

11
Jika Anda mendapatkan kesalahan perintah yang bertentangan, ambil opsi --optimize.
Sarcastron

saya rasa Anda harus menggunakan satu dan hanya satu dari opsi ini: perbaikan otomatis, periksa atau optimalkan. Saya hanya menggunakan perbaikan otomatis dan bekerja
Packet Tracer

Saya mencoba apa yang Anda katakan tetapi saya mendapatkan: mysqlcheck: Mendapat kesalahan: 1045: Akses ditolak untuk pengguna 'root' @ 'localhost' (menggunakan kata sandi: YA) ketika mencoba untuk terhubung dan saya tahu saya menggunakan kata sandi yang benar.
Doug

24

Gunakan kueri berikut untuk mencetak REPAIRpernyataan SQL untuk semua tabel di dalam database:

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

Setelah itu salin semua kueri dan jalankan di mydatabase.

Catatan: ganti mydatabasedengan nama DB yang diinginkan


9

Tidak perlu mengetikkan kata sandi, cukup gunakan salah satu dari perintah ini (cukup jelas):

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

8

Perintah berikut berfungsi untuk saya menggunakan prompt perintah (Sebagai Administrator) di Windows:

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

Jalankan mysqlcheck dengan pengguna root, minta kata sandi, periksa semua database, dan perbaiki otomatis tabel yang rusak.


3

Tidak ada perintah default untuk melakukan itu, tetapi Anda dapat membuat prosedur untuk melakukan pekerjaan itu. Ini akan mengulang melalui baris information_schemadan memanggil REPAIR TABLE 'tablename';setiap baris. CHECK TABLEbelum didukung untuk pernyataan yang disiapkan. Berikut contohnya (ganti MYDATABASE dengan nama database Anda):

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

Saya suka ini untuk pemeriksaan sederhana dari shell:

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

1
Anda dapat menggunakan mysql -ssuntuk membuat nama kolom dihilangkan dari keluaran - ini akan memungkinkan untuk menghapus NR != 1dari kode Anda
Fluffy

1

untuk host plesk, salah satu dari ini harus dilakukan: (keduanya melakukan hal yang sama)

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

1

Anda mungkin membutuhkan nama pengguna dan kata sandi:

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

Anda akan dimintai kata sandi.

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

Jika Anda ingin memasukkan cron, TETAPI kata sandi Anda akan terlihat dalam teks biasa!


1

Jika tabel yang rusak tetap ada setelahnya

mysqlcheck -A --auto-repair

mencoba

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

apa yang -use-frm lakukan?
davidman77

--use-frm Untuk operasi perbaikan pada tabel MyISAM, dapatkan struktur tabel dari kamus data sehingga tabel dapat diperbaiki meskipun header .MYI rusak. (cf. dev.mysql.com/doc/refman/8.0/en/… )
Laloi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.