Bu yüzden bir çoğaltma akışında ayarlanmış bir test db sunucusu var. İsim üzerinde, köle veri dizinindeki alanı hızla dolduran bir optimizasyon geldi. Mysql sadece biraz daha yer bekliyordu.
Bu datadir SADECE mysql'ın datadir'i olarak kullanılan bir dosya sistemidir, bu yüzden ücretsiz başka bir şey yoktu.
Çoğaltma akışının bir parçası olmayan 4 gig innodb test masam vardı, bu yüzden işe yarayıp yaramayacağını görmek için bir şeyler deneyeceğim ve bir test ortamı olarak işler çok yanlış gittiğinde endişelenmedim.
İşte attığım adımlar
- Taşımak üzere olduğum masayı yıkadım
- Üzerine bir okuma kilidi yerleştirildi (üzerine hiçbir şey yazmasa ve çoğaltma akışında olmasa bile)
- .Frm ve .ibd dosyalarını yedek oda bulunan bir dosya sistemine kopyaladı
- Masanın kilidi açıldı
- Bu tablo kesildi - bu, optimizasyonun bitmesi için yeterli alan bıraktı, çoğaltma tekrar tekrar çalmaya başladı.
- Köle / kapatma MySQL'i durdur
- Dosyayı tmp dışında veri dizinine kopyalayın
- MySQL'i yeniden başlat
.Err günlüğünde hiçbir şey görünmüyor, işler iyi görünüyor. Ben mydb bağlamak ve kullanmak; ve gösteri tablolarında uğraştığım tabloyu görüyorum. Ama denersem
select * from testtable limit 10;
Hatayı alıyorum
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
Şimdiye kadar söyleyebileceğim kadar tüm diğer tablolardan gayet iyi okuyabilir ve çoğaltma herhangi bir şikayet w / o geri başladı.
Bu noktadan sonra kurtarmak için yapabileceğim bir şey var mı? Gerekirse sıfırdan yeniden inşa edebilirim ama genel olarak başkalarının bu girişim hakkında ne düşündüğünü merak ettim. Attığım adımlarla ilgili daha kusursuz sonuçlara yol açacak bir şey var mıydı?
Ya bu bir test sunucusu olmasaydı, sadece 'canlı mı yapıyordum' ve ne olacağını göremedim? Bunu yapmak zorunda kalsaydım, bir üretim kölesinde geçici olarak yer açmanın en iyi yolu ne olurdu?
Table 'X' doesn't exist in engine
. Her bir tablo için yukarıdaki yöntemi yapmak zorunda mıyım yoksa bunu düzeltmenin daha iyi yolları var mı?