Saya berangkat kerja pada sore hari dan terkejut mendengar ada masalah dengan situs dedecms saya. Ketika saya mengunjunginya, saya menemukan kesalahan layar penuh. Saya memeriksa log mysql dan pesan kesalahannya adalah:
Tabel '. dedecmsv4dede_archives' ditandai sebagai rusak dan harus diperbaiki.
Dikatakan cms. Tabel artikel dede_archives ditandai sebagai bermasalah dan perlu diperbaiki. Jadi saya segera memulihkan data historis dan online untuk mencari tahu penyebabnya. Masalahnya pada akhirnya akan terpecahkan. Solusinya adalah sebagai berikut:
Temukan alat bin/myisamchk di direktori instalasi mysql, dan masukkan di baris perintah:
myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI
Kemudian alat myisamchk akan membantu Anda memulihkan indeks dari tabel data. Mulai ulang mysql dan masalahnya terpecahkan.
Analisis Masalah:
1. Penyebab error Beberapa netizen mengatakan bahwa itu adalah kesalahan indeks yang disebabkan oleh seringnya query dan update tabel dede_archives.Karena halaman saya tidak dibuat secara statis, melainkan halaman dinamis, saya cukup setuju dengan pernyataan ini . Dikatakan juga bahwa database MYSQL telah rusak karena beberapa alasan. Misalnya, pemadaman listrik tiba-tiba pada server database, beberapa operasi pada file asli tabel saat memberikan layanan ke tabel database dapat menyebabkan database MYSQL menjadi rusak. rusak. Tabel rusak dan data tidak dapat dibaca. Singkatnya, jam tangan tersebut rusak karena beberapa masalah yang tidak terduga.
Nomor soal adalah 145
2. Penyelesaian masalah.
Saat Anda mencoba memperbaiki masalah tabel yang rusak, ada tiga jenis perbaikan. Jika Anda mendapatkan pesan kesalahan yang menyatakan bahwa file sementara tidak dapat dibuat, hapus file yang ditunjukkan oleh pesan tersebut dan coba lagi - ini biasanya merupakan sisa dari operasi perbaikan sebelumnya.
Ketiga perbaikan tersebut adalah sebagai berikut:
% myisamchk --recover --quick /path/ke/tblName
% myisamchk --pulihkan /path/ke/tblName
% myisamchk --safe-recover /path/ke/tblName
Yang pertama adalah yang tercepat dan digunakan untuk memperbaiki masalah yang paling umum; yang terakhir adalah yang paling lambat dan digunakan untuk memperbaiki masalah yang tidak dapat diperbaiki dengan metode lain.
Mengecek dan Memperbaiki File Data MySQL Jika cara di atas tidak bisa memperbaiki tabel yang rusak, sebelum menyerah, Anda juga bisa mencoba dua tips berikut ini:
Jika Anda mencurigai telah terjadi kesalahan yang tidak dapat diperbaiki pada file indeks (*.MYI) tabel, atau bahkan file tersebut hilang, Anda dapat menggunakan file data (*.MYD) dan file format data (*.frm) untuk meregenerasinya. Pertama buat salinan file data (tblName.MYD). Mulai ulang layanan MySQL Anda dan sambungkan ke layanan tersebut. Gunakan perintah berikut untuk menghapus konten tabel:
mysql> HAPUS DARI tblName;
Saat menghapus isi tabel, file indeks baru akan dibuat. Logout dan tutup kembali layanan, lalu timpa file data baru (kosong) dengan file data yang baru saja Anda simpan (tblName.MYD). Terakhir, gunakan myisamchk untuk melakukan perbaikan standar (metode kedua di atas) untuk membuat ulang data indeks berdasarkan konten data tabel dan file format tabel.
Jika file format tabel Anda (tblName.frm) hilang atau memiliki kesalahan yang tidak dapat diperbaiki, tetapi Anda tahu cara menggunakan pernyataan CREATE TABLE yang sesuai untuk membuat ulang tabel, Anda dapat membuat ulang file .frm baru dan menggunakannya dengan file data Anda dan mengindeks file (jika ada masalah dengan file indeks, gunakan cara di atas untuk membuat ulang yang baru). Pertama buat salinan data dan file indeks, lalu hapus file asli (hapus semua catatan yang terkait dengan tabel ini di direktori data).
Mulai layanan MySQL dan buat tabel baru menggunakan file CREATE TABLE asli. File .frm yang baru seharusnya berfungsi dengan baik, tetapi yang terbaik adalah jika Anda melakukan perbaikan standar (metode kedua di atas).
3. Pengenalan alat myisamchk (lihat manual resmi mysql).
Anda dapat menggunakan utilitas myisamchk untuk memperoleh informasi tentang tabel database atau untuk memeriksa, memperbaiki, dan mengoptimalkannya. myisamchk berlaku untuk tabel MyISAM (tabel yang sesuai dengan file .MYI dan .MYD).
Metode untuk memanggil myisamchk:
shell> myisamchk [pilihan] tbl_name ...
options menentukan apa yang Anda ingin myisamchk lakukan. Hal tersebut akan dijelaskan kemudian. Anda juga bisa mendapatkan daftar opsi dengan menelepon myisamchk --help.
tbl_name adalah tabel database yang ingin Anda periksa atau perbaiki. Jika Anda tidak menjalankan myisamchk di suatu tempat di direktori database, Anda harus menentukan jalur ke direktori database karena myisamchk tidak mengetahui di mana database Anda berada. Faktanya, myisamchk tidak peduli apakah file yang Anda operasikan terletak di direktori database; Anda dapat menyalin file yang sesuai dengan tabel database di tempat lain dan melakukan operasi pemulihan di sana.
Jika mau, Anda dapat menggunakan baris perintah myisamchk untuk memberi nama beberapa tabel. Anda juga dapat menentukan tabel dengan memberi nama file indeks (dengan akhiran ".MYI"). Hal ini memungkinkan Anda untuk menentukan semua tabel dalam direktori dengan menggunakan skema "*.MYI". Misalnya jika Anda berada di direktori database, Anda dapat memeriksa semua tabel MyISAM di direktori seperti ini:
shell> myisamchk *.MYI
Jika Anda tidak berada di direktori database, Anda dapat memeriksa semua tabel di sana dengan menentukan path ke direktori:
shell> myisamchk /path/to/database_dir/*.MYI
Anda bahkan dapat memeriksa semua tabel di semua database dengan menentukan wildcard untuk jalur ke direktori data MySQL:
shell> myisamchk /path/to/datadir/*/*.MYI
Cara yang disarankan untuk memeriksa semua tabel MyISAM dengan cepat adalah:
shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI
Jika Anda ingin memeriksa semua tabel MyISAM dan memperbaiki tabel yang rusak, Anda dapat menggunakan perintah berikut:
shell> myisamchk --silent --force --fast --update-state
-O key_buffer=64M -O sort_buffer=64M
-O read_buffer=1M -O write_buffer=1M
/path/ke/datadir/*/*.MYI
Perintah ini mengasumsikan Anda memiliki lebih dari 64MB memori bebas. Untuk rincian tentang pengalokasian memori dengan myisamchk, lihat Bagian 5.9.5.5, “Penggunaan Memori myisamchk”.
Saat Anda menjalankan myisamchk, Anda harus memastikan bahwa program lain tidak menggunakan tabel tersebut. Jika tidak, saat Anda menjalankan myisamchk, pesan kesalahan berikut akan ditampilkan:
peringatan: klien menggunakan atau belum menutup tabel dengan benar
Ini menunjukkan bahwa Anda mencoba memeriksa tabel yang sedang diperbarui oleh program lain (seperti server mysqld) yang belum menutup file atau telah dihentikan tanpa menutup file dengan benar.
Jika mysqld sedang berjalan, Anda harus melakukan flush paksa setiap modifikasi tabel yang masih ada di memori melalui FLUSH TABLES. Saat Anda menjalankan myisamchk, Anda harus memastikan bahwa program lain tidak menggunakan tabel tersebut. Cara termudah untuk menghindari masalah ini adalah dengan menggunakan CHECK TABLE alih-alih myisamchk untuk memeriksa tabel.