giriiş
Bazen MySQL tabloları bozulabilir; bu da bir hata oluştuğu ve içindeki verilerin okunamadığı anlamına gelir. Bozuk bir tablodan okuma girişiminde bulunmak genellikle sunucunun çökmesine neden olur.
Tablo bozulmasının yaygın nedenleri
- MySQL hizmeti veri yazma sırasında duruyor
- Sunucu tarafından değiştirilirken harici uygulama tarafından tablo değişikliği
- Beklenmedik araç durması
- Bilgisayar donanım arızası
- MySQL kodunda yazılım hatası
Tablolarınızdan birinin bozulduğundan şüpheleniyorsanız, onarım veya sorun giderme işlemlerine başlamadan önce veri dizininizi yedeklemelisiniz. Bu, veri kaybı riskini en aza indirmenize yardımcı olacaktır.
MySQL'de bozuk bir tabloyu onarma adımları
Öncelikle MySQL servisini durduralım:
sudo systemctl stop mysqlNot: Rocky Linux gibi bazı sistemlerde MySQL hizmeti şu şekilde adlandırılabilir: mysqld Tanınmak.
Ardından tüm verilerinizi yeni bir yedekleme dizinine kopyalayın. Ubuntu sistemlerinde varsayılan veri dizini şudur: /var/lib/mysql/ şudur:
cp -r /var/lib/mysql /var/lib/mysql_bkpYedeklemeyi tamamladıktan sonra, tablonun gerçekten bozuk olup olmadığını kontrol etmeye hazırsınız. Tablo depolama motoru tarafından yedeklenmemişse, BenimISAM MySQL kullanıyorsanız, şu komutu çalıştırarak yeniden başlatabilirsiniz: KONTROL TABLOSU MySQL komut isteminden kontrol edin:
sudo systemctl start mysqlCHECK TABLE table_name;Tablo bozuksa, bunu onaylayan bir mesaj gösterilir. Bir MyISAM tablosu bozuksa, genellikle şu komutu kullanarak düzeltebilirsiniz: TAMİR MASASI Düzeltildi:
REPAIR TABLE table_name;Onarım başarılı olursa çıktıda buna benzer bir mesaj göreceksiniz:
Output
+--------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status | OK |
+--------------------------+--------+----------+----------+Tablo hala bozuksa, MySQL dokümanları bozuk tabloları onarmak için alternatif yöntemler sağlar.
InnoDB depolama motoruyla bozuk tabloların onarılması
Tablo depolama motorundan bozulmuşsa InnoDB Onarım süreci, kullandığınız MySQL sürümüne bağlı olarak farklılık gösterecektir. InnoDB, 8.0 sürümünden beri MySQL için varsayılan depolama motoru olarak kullanılmakta olup, otomatik bozulma denetimi ve onarım özelliklerine sahiptir. InnoDB, okuduğu her sayfanın sağlama toplamlarını kullanarak hatalı sayfaları tespit eder ve sağlama toplamlarında bir fark tespit ederse MySQL sunucusunu otomatik olarak durdurur.
InnoDB tablolarını onarmaya nadiren ihtiyaç duyulur, çünkü InnoDB, sunucuyu yeniden başlatarak çoğu sorunu çözebilen bir çökme kurtarma mekanizmasına sahiptir. Ancak, bir InnoDB tablosunu yeniden oluşturmanız gereken bir durumla karşılaşırsanız, MySQL belgelerinde bunun nasıl yapılacağına dair talimatlar bulabilirsiniz. Boşaltın ve Yeniden Yükleyin Bu yöntem, bozuk tabloya erişimin yeniden sağlanmasını içerir. mysqldump Bir tablonun yapısını ve içindeki verileri koruyan mantıksal bir yedeğini oluşturmak ve daha sonra tabloyu veritabanına yeniden eklemek için kullanılır.
MySQL hizmetini yeniden başlatın
Öncelikle MySQL servisini yeniden başlatarak sunucuya erişim sağlayıp sağlamadığını kontrol edin:
sudo systemctl restart mysqlSunucu hala kapalıysa veya kullanılamıyorsa, şu seçeneği kullanabilirsiniz: kurtarmayı_güçle Ayarlarda InnoDB'yi etkinleştirin. Bunu yapmak için bir dosya oluşturun mysqld.cnf Düzenle. Ubuntu ve Debian sistemlerinde bu dosya genellikle şu konumda bulunur: /etc/mysql/ Red Hat ve Rocky sistemlerinde bu dosya genellikle şu konumda bulunur: /etc/my.cnf.d Yer almaktadır.
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfBölümde [mysqld] Aşağıdaki satırı ekleyin:
. . .
[mysqld]
. . .
innodb_force_recovery=1Değişiklikleri kaydedip dosyayı kapattıktan sonra MySQL hizmetini tekrar başlatmayı deneyin. Bozuk tabloya erişebiliyorsanız, aracı kullanın. mysqldump Tablo verilerini yedeklemek için bunu kullanın. Bu dosyaya istediğiniz adı verebilirsiniz, ancak burada adı şu şekilde olacaktır: out.sql Biz buna şöyle diyoruz:
mysqldump database_name table_name > out.sqlArdından tabloyu veritabanından silin. Bunu yapmak için aşağıdaki komutu kullanabilirsiniz:
mysql -u user -p --execute="DROP TABLE database_name.table_name"Son olarak dosyayı kullanarak tabloyu oluşturun çöplük Yakın zamanda oluşturduğunuz dosyayı geri alın:
mysql -u user -p < out.sqlInnoDB depolama motorunun genellikle eski MyISAM motorundan daha dayanıklı olduğunu unutmayın. InnoDB kullanan tablolar yine de bozulabilir, ancak kendi kendini onarma özellikleri sayesinde tablo bozulması ve çökme riski çok daha düşüktür.
Sonuç
Bu kılavuzu izleyerek, MySQL'deki bozuk tabloları nasıl onaracağınızı ve hem MyISAM hem de InnoDB depolama motorlarındaki sorunları çözmek için farklı yöntemler kullanmayı öğrendiniz. Veri kaybı riskini önlemek için herhangi bir değişiklik yapmadan önce verilerinizi mutlaka yedekleyin.









