MySQL "Table doesn't exist" — Tablo Ortada Yok, Ama Neden?
lower_case_table_names kaynaklı büyük-küçük harf sorunu, taşınmış .ibd dosyaları ve "Unknown storage engine" hatasında eklenti kontrolü.
Operasyonel Doğrulama & Güvenilirlik Standardı
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
ERROR 1146 (42S02): Table 'app.Siparis' doesn't existBu hata tablonun fiziksel olarak diskte bulunmasına rağmen tetiklenebilir. SHOW TABLES komutunda siparis listelenirken SELECT * FROM Siparis sorgusu Error 1146 veriyorsa sorun veritabanında değil işletim sistemi ile MySQL arasındaki varsayımlardadır.
▸Kök Neden 1: `lower_case_table_names` Uyuşmazlığı (En Sık)
Bu parametre veritabanı ilk başlatılırken (initdb) sabitlenir ve sonradan değiştirilemez:
SHOW VARIABLES LIKE 'lower_case_table_names';| Değer | Büyük-Küçük Harf Davranışı | Tipik İşletim Sistemi |
|---|---|---|
| 0 | Büyük-küçük harfe duyarlıdır (Case-sensitive) | Linux varsayılanı |
| 1 | Küçük harfe dönüştürülür ve saklanır | Windows varsayılanı |
| 2 | Duyarsızdır ancak yazıldığı gibi saklanır | macOS varsayılanı |
Geliştirme ortamı Windows (1) olan bir uygulama Siparis yazıp Linux üretim ortamına (0) geçtiğinde siparis tablosunu bulamaz → 1146.
Çözüm:
RENAME TABLE Siparis TO siparis;Önce tüm tablo adlarını envanterleyin ve uygulama kodlarındaki referansları küçük harfe çevirin.
▸Kök Neden 2: Yetim (Orphan) `.ibd` Dosyaları
Dosya diskte var ancak veri sözlüğünde (Data Dictionary) yoksa:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'app';ls -la /var/lib/mysql/app/.ibd diskte mevcut ancak information_schema'da görünmüyorsa dosya hatalı bir kopyalamadan kalmıştır. Tabloyu yeniden oluşturmaya çalışmayın; aksi takdirde `ERROR 1813: Tablespace exists` alırsınız. Kurtarma için .cfg dosyası ile ALTER TABLE ... IMPORT TABLESPACE yürütülmelidir.
▸Kök Neden 3: Yanlış Şema veya Replikasyon Filtresi
Uygulama bağlantısı USE db; komutu göndermiyorsa varsayılan veritabanında arar. Replikasyonda ise replicate-do-db filtresi primary'de tabloyu açarken replica'da atlamış olabilir.
▸İlişkili Hata: ERROR 1286 Unknown storage engine 'InnoDB'
ERROR 1286 (42000): Unknown storage engine 'InnoDB'Bu durumda tablo değil depolama motoru çökmüştür:
SHOW ENGINES;
SHOW PLUGINS;InnoDB DISABLED ise --skip-innodb ile başlatılmış olabilir. Hata günlüğünde (mysqld.log) InnoDB: Cannot allocate memory veya ibdata1 dosya izinlerini kontrol edin.
- •İlgili Hata: MySQL No space left on device
- •Veritabanı Hub: MySQL Üretim Mimarisi Rehberi
Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
MySQL ERROR 1045 Access denied: root Şifresi Sıfırlama Rehberi
MySQL 1045 hatasının dört nedeni, "using password: YES/NO" ayrımının anlamı ve kilitli kalınca --init-file ile güvenli şifre sıfırlama.
MySQL Deadlock ERROR 1213: Grafiği Okuma ve Kalıcı Önleme
MySQL 1213 deadlock hatasının nedeni, LATEST DETECTED DEADLOCK çıktısını okuma, gap lock kaynaklı kilitlenmeler ve uygulama tarafında retry tasarımı.
MySQL Lock wait timeout exceeded: Bloklayan İşlemi Bulma
1205 lock wait timeout hatasında bloklayan işlemi performance_schema ile bulma, KILL kararını verme ve kilidi kalıcı olarak azaltma yöntemleri.