fbpx
30 C
Jakarta
Selasa, 14 Mei 2024

Cara Memperbaiki Tabel yang Rusak di MySQL

Kadang-kadang, tabel MySQL dapat rusak, artinya telah terjadi kesalahan dan data yang disimpan di dalamnya tidak dapat dibaca. Upaya untuk membaca dari tabel yang rusak biasanya akan menyebabkan server mogok.

Beberapa penyebab umum tabel rusak adalah:
– Server MySQL berhenti di tengah penulisan.
– Program eksternal memodifikasi tabel yang secara bersamaan dimodifikasi oleh server.
– Mesin tiba-tiba mati.
– Perangkat keras komputer gagal.
– Ada bug perangkat lunak di suatu tempat di kode MySQL.

Jika Anda menduga bahwa salah satu tabel Anda rusak, Anda harus membuat cadangan direktori data Anda sebelum memecahkan masalah atau mencoba memperbaiki tabel. Ini akan membantu meminimalkan risiko kehilangan data.

Pertama, hentikan layanan MySQL:

$ sudo systemctl stop mysql

Kemudian salin semua data Anda ke direktori cadangan baru. Pada sistem Ubuntu/Debian, direktori data default adalah /var/lib/mysql/:

$ cp -r /var/lib/mysql /var/lib/mysql_bkp

Setelah membuat pencadangan, Anda siap untuk mengecheck apakah tabel benar-benar rusak. Jika tabel menggunakan mesin penyimpanan MyISAM, Anda dapat memeriksa apakah tabel tersebut rusak dengan memulai ulang MySQL dan menjalankan pernyataan CHECK TABLE dari prompt MySQL:

$ sudo systemctl start mysql
mysql> CHECK TABLE table_name;

Sebuah pesan akan muncul di keluaran pernyataan ini yang memberi tahu Anda apakah itu rusak atau tidak. Jika tabel MyISAM memang rusak, biasanya dapat diperbaiki dengan mengeluarkan pernyataan REPAIR TABLE:

mysql> REPAIR TABLE table_name;

Dengan asumsi perbaikan berhasil, Anda akan melihat pesan seperti ini di output Anda:

Output
+--------------------------+--------+----------+----------+
| Table                    | Op     | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status   | OK       |
+--------------------------+--------+----------+----------+

Namun, jika tabel masih rusak, dokumentasi MySQL menyarankan beberapa metode alternatif untuk memperbaiki tabel yang rusak.

Baca Juga:  Cara menginstal Nginx, MariaDB dan HHVM pada Debian 8

Sebaliknya, jika tabel yang rusak menggunakan mesin penyimpanan InnoDB, maka proses perbaikannya akan berbeda. InnoDB adalah mesin penyimpanan default di MySQL pada versi 8.0, dan menampilkan operasi pemeriksaan dan perbaikan kerusakan otomatis. InnoDB memeriksa halaman yang rusak dengan melakukan checksum pada setiap halaman yang dibacanya, dan jika menemukan ketidaksesuaian checksum, server MySQL akan dihentikan secara otomatis.

Jarang ada kebutuhan untuk memperbaiki tabel InnoDB, karena InnoDB menampilkan mekanisme pemulihan kerusakan yang dapat menyelesaikan sebagian besar masalah saat server dimulai ulang. Namun, jika Anda menghadapi situasi di mana Anda perlu membangun kembali tabel InnoDB yang rusak, dokumentasi MySQL merekomendasikan penggunaan metode “Dump and Reload”. Ini melibatkan mendapatkan kembali akses ke tabel yang rusak, menggunakan utilitas mysqldump untuk membuat cadangan logis dari tabel, yang akan mempertahankan struktur tabel dan data di dalamnya, lalu memuat ulang tabel kembali ke database.

Dengan mengingat hal itu, coba mulai ulang layanan MySQL untuk melihat apakah hal itu akan memungkinkan Anda mengakses server:

$ sudo systemctl restart mysql

Jika server tetap macet atau tidak dapat diakses, mungkin berguna untuk mengaktifkan opsi force_recovery InnoDB. Anda dapat melakukannya dengan mengedit file mysqld.cnf. Pada sistem Ubuntu dan Debian, file ini biasanya ada di etc/mysql. Pada sistem Red Hat dan Rocky, file ini biasanya ada di /etc/my.cnf.d.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Di bagian [mysqld], tambahkan baris berikut:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
[mysqld]
. . .
innodb_force_recovery=1

Simpan dan tutup file, lalu coba mulai ulang layanan MySQL lagi. Jika Anda berhasil mengakses tabel yang rusak, gunakan utilitas mysqldump untuk membuang data tabel Anda ke file baru. Anda dapat menamai file ini apa pun yang Anda suka, tetapi di sini kami akan out.sql:

$ mysqldump database_name table_name > out.sql

Kemudian jatuhkan tabel dari database. Untuk menghindari keharusan membuka kembali prompt MySQL, Anda dapat menggunakan sintaks berikut:

$ mysql -u user -p --execute="DROP TABLE database_name.table_name"

Setelah ini, pulihkan tabel dengan file dump yang baru saja Anda buat:

$ mysql -u user -p < out.sql

Perhatikan bahwa mesin penyimpanan InnoDB umumnya lebih toleran terhadap kesalahan daripada mesin MyISAM yang lebih lama. Tabel yang menggunakan InnoDB masih dapat rusak, tetapi karena fitur pemulihan otomatisnya, risiko kerusakan tabel dan kerusakan jauh lebih rendah.

Kadang-kadang, tabel MySQL dapat rusak, artinya telah terjadi kesalahan dan data yang disimpan di dalamnya tidak dapat dibaca. Upaya untuk membaca dari tabel yang rusak biasanya akan menyebabkan server mogok.

Beberapa penyebab umum tabel rusak adalah:
– Server MySQL berhenti di tengah penulisan.
– Program eksternal memodifikasi tabel yang secara bersamaan dimodifikasi oleh server.
– Mesin tiba-tiba mati.
– Perangkat keras komputer gagal.
– Ada bug perangkat lunak di suatu tempat di kode MySQL.

Jika Anda menduga bahwa salah satu tabel Anda rusak, Anda harus membuat cadangan direktori data Anda sebelum memecahkan masalah atau mencoba memperbaiki tabel. Ini akan membantu meminimalkan risiko kehilangan data.

Pertama, hentikan layanan MySQL:

$ sudo systemctl stop mysql

Kemudian salin semua data Anda ke direktori cadangan baru. Pada sistem Ubuntu/Debian, direktori data default adalah /var/lib/mysql/:

$ cp -r /var/lib/mysql /var/lib/mysql_bkp

Setelah membuat pencadangan, Anda siap untuk mengecheck apakah tabel benar-benar rusak. Jika tabel menggunakan mesin penyimpanan MyISAM, Anda dapat memeriksa apakah tabel tersebut rusak dengan memulai ulang MySQL dan menjalankan pernyataan CHECK TABLE dari prompt MySQL:

$ sudo systemctl start mysql
mysql> CHECK TABLE table_name;

Sebuah pesan akan muncul di keluaran pernyataan ini yang memberi tahu Anda apakah itu rusak atau tidak. Jika tabel MyISAM memang rusak, biasanya dapat diperbaiki dengan mengeluarkan pernyataan REPAIR TABLE:

mysql> REPAIR TABLE table_name;

Dengan asumsi perbaikan berhasil, Anda akan melihat pesan seperti ini di output Anda:

Output
+--------------------------+--------+----------+----------+
| Table                    | Op     | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status   | OK       |
+--------------------------+--------+----------+----------+

Namun, jika tabel masih rusak, dokumentasi MySQL menyarankan beberapa metode alternatif untuk memperbaiki tabel yang rusak.

Baca Juga:  Instal phpMyAdmin di Debian 11 dengan Nginx

Sebaliknya, jika tabel yang rusak menggunakan mesin penyimpanan InnoDB, maka proses perbaikannya akan berbeda. InnoDB adalah mesin penyimpanan default di MySQL pada versi 8.0, dan menampilkan operasi pemeriksaan dan perbaikan kerusakan otomatis. InnoDB memeriksa halaman yang rusak dengan melakukan checksum pada setiap halaman yang dibacanya, dan jika menemukan ketidaksesuaian checksum, server MySQL akan dihentikan secara otomatis.

Jarang ada kebutuhan untuk memperbaiki tabel InnoDB, karena InnoDB menampilkan mekanisme pemulihan kerusakan yang dapat menyelesaikan sebagian besar masalah saat server dimulai ulang. Namun, jika Anda menghadapi situasi di mana Anda perlu membangun kembali tabel InnoDB yang rusak, dokumentasi MySQL merekomendasikan penggunaan metode “Dump and Reload”. Ini melibatkan mendapatkan kembali akses ke tabel yang rusak, menggunakan utilitas mysqldump untuk membuat cadangan logis dari tabel, yang akan mempertahankan struktur tabel dan data di dalamnya, lalu memuat ulang tabel kembali ke database.

Dengan mengingat hal itu, coba mulai ulang layanan MySQL untuk melihat apakah hal itu akan memungkinkan Anda mengakses server:

$ sudo systemctl restart mysql

Jika server tetap macet atau tidak dapat diakses, mungkin berguna untuk mengaktifkan opsi force_recovery InnoDB. Anda dapat melakukannya dengan mengedit file mysqld.cnf. Pada sistem Ubuntu dan Debian, file ini biasanya ada di etc/mysql. Pada sistem Red Hat dan Rocky, file ini biasanya ada di /etc/my.cnf.d.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Di bagian [mysqld], tambahkan baris berikut:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
[mysqld]
. . .
innodb_force_recovery=1

Simpan dan tutup file, lalu coba mulai ulang layanan MySQL lagi. Jika Anda berhasil mengakses tabel yang rusak, gunakan utilitas mysqldump untuk membuang data tabel Anda ke file baru. Anda dapat menamai file ini apa pun yang Anda suka, tetapi di sini kami akan out.sql:

$ mysqldump database_name table_name > out.sql

Kemudian jatuhkan tabel dari database. Untuk menghindari keharusan membuka kembali prompt MySQL, Anda dapat menggunakan sintaks berikut:

$ mysql -u user -p --execute="DROP TABLE database_name.table_name"

Setelah ini, pulihkan tabel dengan file dump yang baru saja Anda buat:

$ mysql -u user -p < out.sql

Perhatikan bahwa mesin penyimpanan InnoDB umumnya lebih toleran terhadap kesalahan daripada mesin MyISAM yang lebih lama. Tabel yang menggunakan InnoDB masih dapat rusak, tetapi karena fitur pemulihan otomatisnya, risiko kerusakan tabel dan kerusakan jauh lebih rendah.

Untuk mendapatkan Berita & Review menarik Saksenengku Network
Google News

Artikel Terkait

Populer

Artikel Terbaru