MySQL'de bozuk tablolar nasıl onarılır

0 Hisse senetleri
0
0
0
0

giriiş

Bazen MySQL tabloları bozulabilir; bu da bir hata oluştuğu ve tablolarda depolanan verilerin okunamadığı anlamına gelir. Bozuk bir tablodan okuma girişiminde bulunmak genellikle sunucunun çökmesine neden olur.

Tablo bozulmasının bazı yaygın nedenleri şunlardır:

  • MySQL sunucusu bir yazma işleminin ortasında duruyor.
  • Sunucu tarafından aynı anda değiştirilen bir tabloyu harici bir uygulama değiştirir.
  • Cihaz beklenmedik bir şekilde kapanıyor.
  • Bilgisayar donanımı arızalanır.
  • MySQL kodunda bir yerde yazılım hatası var.

Tablolarınızdan birinin bozulduğundan şüpheleniyorsanız, sorun gidermeye veya tabloyu onarmaya çalışmadan önce veri listenizi yedeklemelisiniz. Bu, veri kaybı riskini azaltmaya yardımcı olur.

Öncelikle MySQL servisini durduralım:

sudo systemctl stop mysql

Ardından tüm verilerinizi yeni bir yedekleme klasörüne kopyalayın. Ubuntu sistemlerinde varsayılan veri dizini /var/lib/mysql/'dir:

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

Yedeklemeyi aldıktan sonra, tablonun gerçekten bozuk olup olmadığını kontrol etmeye hazırsınız. Tablo MyISAM depolama motorunu kullanıyorsa, MySQL'i yeniden başlatıp MySQL komut isteminden CHECK TABLE ifadesini çalıştırarak bozulma olup olmadığını kontrol edebilirsiniz:

sudo systemctl start mysql
CHECK TABLE table_name;

Bu ifadenin çıktısında, bozuk olup olmadığını bildiren bir mesaj görünecektir. MyISAM tablosu gerçekten bozuksa, genellikle REPAIR TABLE ifadesi çalıştırılarak onarılabilir:

REPAIR TABLE table_name;

Onarımın başarılı olduğunu varsayarsak çıktınızda şuna benzer bir mesaj göreceksiniz:

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

Eğer tablo hala bozuksa, MySQL dokümantasyonu bozuk tabloları onarmak için birkaç alternatif yöntem önermektedir.

Öte yandan, bozuk tablo InnoDB depolama motorunu kullanıyorsa, onarım süreci farklıdır. InnoDB, 8.0 sürümünden beri MySQL'deki varsayılan depolama motorudur ve otomatik bozulma denetimi ve onarımı özelliğine sahiptir. InnoDB, okuduğu her sayfada toplam kontrolleri gerçekleştirerek bozuk sayfaları kontrol eder ve bir sıralama tutarsızlığı tespit ederse MySQL sunucusunu otomatik olarak durdurur.

InnoDB tablolarını onarmaya nadiren ihtiyaç duyulur, çünkü InnoDB, sunucu yeniden başlatıldığında çoğu sorunu çözebilen bir çökme kurtarma mekanizmasına sahiptir. Ancak, bozuk bir InnoDB tablosunu yeniden oluşturmanız gereken bir durumla karşılaşırsanız, MySQL belgeleri Dump and Reload yöntemini kullanmanızı önerir. Bu yöntem, bozuk tabloya erişimi geri yüklemeyi, mysqldump yardımcı programını kullanarak tablonun yapısını ve içindeki verileri koruyan mantıksal bir yedeğini oluşturmayı ve ardından tabloyu veritabanına yeniden yüklemeyi içerir.

Bunu aklınızda tutarak MySQL servisini yeniden başlatarak sunucuya erişiminizin olup olmadığını kontrol edin:

sudo systemctl restart mysql

Sunucu kapalıysa veya erişilemiyorsa, InnoDB force_recovery seçeneğini etkinleştirmek faydalı olabilir. Bunu mysqld.cnf dosyasını düzenleyerek yapabilirsiniz. Ubuntu ve Debian sistemlerinde bu dosya genellikle etc/mysql konumunda bulunur. Red Hat ve Rocky sistemlerinde ise bu dosya genellikle /etc/my.cnf.d konumunda bulunur.

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

[mysqld] bölümüne aşağıdaki satırı ekleyin:

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

Dosyayı kaydedip kapatın ve ardından MySQL hizmetini yeniden başlatın. Bozuk tabloya başarıyla erişebiliyorsanız, mysqldump yardımcı programını kullanarak tablo verilerinizi yeni bir dosyaya aktarın. Bu dosyaya istediğiniz adı verebilirsiniz, ancak biz burada dump.sql adını vereceğiz:

mysqldump database_name table_name > out.sql

Ardından tabloyu veritabanından silin. MySQL komutunun tekrar açılmasını önlemek için aşağıdaki komutu kullanabilirsiniz:

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

Daha sonra oluşturduğunuz dump dosyası ile tabloyu geri yükleyin:

mysql -u user -p < out.sql

InnoDB depolama motorunun genellikle eski MyISAM motorundan daha fazla hata toleransına sahip olduğunu unutmayın. InnoDB kullanan tablolar yine de bozulabilir, ancak kendi kendini onarma özellikleri sayesinde tablo bozulması ve arıza riski önemli ölçüde daha düşüktür.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Şunları da Beğenebilirsiniz