Pendahuluan
MySQL menawarkan beberapa cara berbeda untuk menganalisis dan memperbaiki database. Kesalahan dan anomali muncul karena berbagai alasan, beberapa di antaranya meliputi:
- Pembaruan atau penurunan versi MySQL.
- Perubahan cepat dalam indeks atau data.
- Inkonsistensi tabel.
Saat memeriksa data yang rusak dan memperbaiki tabel, langkah-langkah yang diambil untuk memperbaiki kesalahan bergantung pada cara Anda terhubung ke database, status server database, jenis kesalahan, dan mesin database yang digunakan.
Artikel ini menunjukkan beberapa cara untuk memecahkan masalah dan memperbaiki database MySQL.
Prasyarat
- Terminal atau baris perintah dengan hak akses root.
- MySQL versi 8.0 diinstal dan dikonfigurasi.
- Database atau tabel database yang rusak.
Cara Memeriksa Tabel MySQL untuk Kesalahan
Menjalankan diagnostik adalah langkah pertama untuk memecahkan masalah. Ada dua cara untuk memeriksa kesalahan tabel MySQL:
- Melalui
CHECK TABLE
MySQL kueri. - Menggunakan program terminal
mysqlcheck
.
Memeriksa Tabel dengan CHECK TABLE
CHECK TABLE
kueri berfungsi di MySQL saat layanan sedang berjalan. Penggunaan umum adalah:
CHECK TABLE <table name> [, table name, table name] [option] [option];
Penggunaan paling sederhana adalah satu tabel tanpa opsi apa pun:
CHECK TABLE <table name>;
Output dari CHECK TABLE
query menunjukkan tabel informatif tentang hasil pemeriksaan:
Opsi yang tersedia saat memeriksa tabel adalah:
FOR UPGRADE
- menemukan inkonsistensi versi. Misalnya, MySQL 8.0 tidak mendukung tahun dua digit, sehingga tabel yang berisi nilai tersebut ditandai untuk peningkatan versi.QUICK
- tidak memeriksa baris untuk penautan yang salah. Ini berguna untuk menghindari waktu tunggu.QUICK
- melakukan pemeriksaan pada tabel yang tidak ditutup dengan benar.CHANGED
- hanya memeriksa tabel dengan perubahan sejak pemeriksaan terakhir atau yang belum ditutup dengan benar.MEDIUM
- memeriksa baris tabel untuk memverifikasi validitas tautan yang dihapus dan melakukan checksum untuk baris tersebut.EXTENDED
- melakukan pemeriksaan untuk konsistensi lengkap.
Tanpa opsi apa pun, CHECK TABLE
melakukan MEDIUM
periksa tabel dan tampilan MyISAM. FOR UPGRADE
dan QUICK
melakukan pemeriksaan pada tabel dan tampilan mesin InnoDB sementara opsi lain diabaikan.
Anda juga dapat menggabungkan opsi untuk pemeriksaan yang lebih detail. Misalnya, untuk melakukan pemeriksaan cepat untuk mengetahui apakah tabel ditutup dengan benar, jalankan:
CHECK TABLE <table name> FAST QUICK;
Opsi apa pun yang tidak berlaku untuk tabel diabaikan.
Memeriksa Tabel Dengan mysqlcheck
mysqlcheck
perintah adalah versi baris perintah dari CHECK TABLE
. Program berjalan di terminal saat layanan MySQL beroperasi. Untuk melakukan pemeriksaan:
1. Sebagai pengguna root, navigasikan ke direktori tempat database disimpan:
sudo su
cd /var/lib/mysql
2. Periksa seluruh database dengan:
mysqlcheck <database name>
Atau, periksa tabel tertentu dalam database dengan memberikan nama tabel juga:
mysqlcheck <database name> <table name>
Cara Memperbaiki Database MySQL
Ada beberapa metode cara memperbaiki database di MySQL. Namun, perlu diingat bahwa metode ini bukan perbaikan cepat dan dapat mengakibatkan hilangnya data. Jika tabel database sering rusak, identifikasi penyebab terjadinya.
Sebelum membuat perubahan dan memulai perbaikan, buat salinan direktori:
cp -rfv /var/lib/mysql /var/lib/mysql_copy
Atau, buat versi cadangan database sebelum mencoba solusi perbaikan apa pun. Ikuti panduan kami:Cara Mencadangkan &Memulihkan Basis Data MySQL.
Di bawah ini Anda akan menemukan tiga opsi cara memperbaiki database MySQL.
Memperbaiki Database MySQL dengan Query REPAIR TABLE
Setelah memindai dan menemukan database dan tabel yang bermasalah, cara tercepat untuk memperbaiki masalah adalah dengan REPAIR TABLE
permintaan:
Jika server mati selama perbaikan, jalankan kembali REPAIR TABLE
operasi ketika server mulai lagi. Pastikan untuk melakukan ini sebelum melakukan operasi lain pada tabel yang sama. Dalam kondisi normal, tabel MyISAM tidak akan mengakibatkan hilangnya data dari penggunaan metode ini.
Memperbaiki Database MySQL dengan mysqlcheck
mysqlcheck command adalah alternatif untuk memperbaiki tabel database di terminal.
1. Pertama, navigasikan ke folder database MySQL sebagai pengguna root:
cd /var/lib/mysql
2. Tambahkan -r
opsi ke mysqlcheck
perintah untuk memperbaiki tabel database:
mysqlcheck -r <database> <table name>
mysqlcheck -r
perintah adalah versi terminal dari REPAIR TABLE
kueri.
Memperbaiki Database MySQL dengan ALTER TABLE
Gunakan ALTER TABLE
query untuk membangun kembali tabel menggunakan mesin penyimpanan yang sama. Misalnya, jika Anda memiliki tabel InnoDB, jalankan:
ALTER TABLE <table name> ENGINE = InnoDB;
Untuk membangun kembali tabel MyISAM, gunakan:
ALTER TABLE <table name> ENGINE = MyISAM;
Jika Anda tidak yakin mesin penyimpanan mana yang digunakan tabel, jalankan kueri berikut untuk mengetahuinya:
SHOW CREATE TABLE <table name>;
Menjalankan Diagnostik dan Perbaikan Khusus Engine ke Database MySQL
Bergantung pada mesin basis data yang digunakan, MySQL menyediakan pendekatan khusus mesin untuk menganalisis dan memperbaiki tabel basis data.
Tabel MyISAM rentan terhadap korupsi. Namun, sebagian besar kesalahan mudah diperbaiki.
Saat bekerja dengan database InnoDB, kerusakan muncul saat nilai checksum tidak cocok. Kesalahan biasanya terjadi karena pemadaman listrik atau masalah perangkat keras lainnya.
Memeriksa dan Memperbaiki Tabel MyISAM dengan myisamchk
MySQL menyediakan pemeriksa khusus untuk tabel MyISAM.
1. Matikan server MySQL. Buka terminal dan jalankan:
systemctl mysql stop
2. Sebagai pengguna root, navigasikan ke lokasi database:
cd /var/lib/mysql/<database name>
3. Untuk memeriksa tabel tertentu, jalankan:
myisamchk <table name>
4. Perbaiki tabel dengan menjalankan:
myisamchk --recover <table name>
5. Mulai ulang server MySQL:
systemctl restart mysql
6. Terakhir, periksa tabel di MySQL setelah pemulihan:
sudo mysql -u <user> -p <password>
USE <database name>;
SELECT * FROM <table name> LIMIT 4;
Menjalankan Proses Pemulihan InnoDB
Dokumentasi MySQL menyarankan untuk menjalankan proses pemulihan InnoDB untuk database InnoDB.
1. Cari dan buka file konfigurasi global menggunakan editor teks favorit Anda. Untuk sistem Ubuntu dan Debian, lokasinya adalah:
cd /etc/mysql/my.cnf
2. Tambahkan opsi berikut ke my.cnf berkas:
[mysqld]
innodb_force_recovery=4
Secara default, opsi pemulihan paksa diatur ke 0 (nonaktif) dan naik ke 6. Setiap level baru menyertakan fitur pemulihan dari angka yang lebih rendah.
3. Simpan dan tutup file.
4. Mulai ulang server MySQL untuk memastikan file konfigurasi baru berlaku:
systemctl restart mysql
5. Di folder home, ekspor semua database ke file backup dengan mysqldump
perintah:
sudo mysqldump --all-databases --add-drop-database --add-drop-table --routines > <file name>.sql
6. Mulai klien MySQL dan jatuhkan semua tabel database yang terpengaruh. Untuk menjatuhkan tabel database, coba:
DROP TABLE IF EXISTS <table name>;
Jika tabel tidak jatuh, coba hapus tabel database secara manual. Masuk sebagai pengguna root dan navigasikan ke direktori tempat database berada:
sudo su
cd /var/lib/mysql/<database name>
Hapus tabel database:
rm -r <table name>
7. Hentikan server MySQL:
systemctl stop mysql
8. Di my.cnf file, beri komentar pada innodb_force_recovery
opsi ditambahkan pada langkah 2 untuk menonaktifkan mode pemulihan. Kemudian, simpan file dan tutup.
9. Jalankan kembali server MySQL:
systemctl start mysql
10. Pulihkan database dari cadangan .sql file di shell MySQL. Masuk ke klien MySQL:
sudo mysql -u <username> -p <password>
11. Jalankan kueri berikut untuk mengimpor database:
USE <database name>;
# Turning off auto commit is optional and speeds things up for larger databases
SET autocommit=0;
SOURCE <file name>.sql;
12. Terakhir, uji database untuk memastikan semuanya berfungsi dengan benar. Jika tidak, pulihkan database dari cadangan dan coba metode alternatif.