Jawaban:
dari baris perintah, Anda dapat menggunakan:
mysqlcheck -A --auto-repair
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
Gunakan kueri berikut untuk mencetak REPAIR
pernyataan 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 mydatabase
dengan nama DB yang diinginkan
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
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.
Tidak ada perintah default untuk melakukan itu, tetapi Anda dapat membuat prosedur untuk melakukan pekerjaan itu. Ini akan mengulang melalui baris information_schema
dan memanggil REPAIR TABLE 'tablename';
setiap baris. CHECK TABLE
belum 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
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>
mysql -ss
untuk membuat nama kolom dihilangkan dari keluaran - ini akan memungkinkan untuk menghapus NR != 1
dari kode Anda
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!
Jika tabel yang rusak tetap ada setelahnya
mysqlcheck -A --auto-repair
mencoba
mysqlcheck -A --auto-repair --use-frm