Yanlışlıkla tüm masaları düşürdüm. Geri yükleyebilir miyim? Yedek kopyam yok.
Yanlışlıkla tüm masaları düşürdüm. Geri yükleyebilir miyim? Yedek kopyam yok.
Yanıtlar:
Kelimenin tam anlamıyla yedeklemeniz yoksa, şansınızın% 99 olduğundan eminim.
Eski olsa da herhangi bir yedekleme biçiminiz varsa, MySQL yapılandırma dosyasına (my.ini) oturum açma seçeneği aracılığıyla ikili günlük kaydını açtınız mı? Eğer öyleyse, son yedeklemeden beri kurtarabilirsiniz.
Bir haftaya başlamanın kötü yolu ahbap.
Soru oldukça eski, ama tek bir olumlu cevap yok, bu yüzden bir tane ekleyeceğim.
MySQL bir tablo bıraktıktan sonra veriler bir süre medyadadır. Böylece kayıtları getirebilir ve bir tabloyu yeniden oluşturabilirsiniz. Daha sonra bunun hakkında blog yazacağım, ancak şimdilik hızlı eskiz.
Tablonuzun yapısına sahip olmanız gerekir (CREATE TABLE ifadesi).
İnnodb_file_per_table ON ise, bırakılan tablo disk bölümünde bulunur. MySQL'i durdurun ve salt okunur ASAP olarak yeniden bağlayın. MySQL bir kök disk bölümündeyse (ki bu iyi bir fikir btw değildir) bir görüntü alın veya diski çıkarın ve başka bir sunucuya takın. Başka bir deyişle tüm yazmaları durdurun.
İnnodb_file_per_table OFF ise MySQL'i durdurun.
Daha sonra https://github.com/twindb/undrop-for-innodb/ adresinden InnoDB için bırakma aracını indirin ve derleyin . "Kontrol Derleme TwinDB kurtarma araç Ayrıntılar için" yazı.
Ardından disk bölümünü veya ibdata1'i (innodb_file_per_table ayarına bağlı olarak) stream_parser ile ayrıştırın:
./stream_parser -f /path/to/diskimage_or_ibdata1
Sonra bırakılan tablonun hangi index_id olduğunu bilmek için InnoDB sözlüğü kurtarmak.
Sonra tablo yapısını alın ve kayıtları getirin
./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page
Kayıtları stdout'a ve LOAD DATA komutunu stderr'e çıkarır.
İşte yaptığım şey. Mysql dizininde (Ubuntu için bu / var / lib / mysql, Homebrew kullanan Mac için bu / usr / local / var / mysql), bazı dosyalar buldum. Önce belirli şemayı içeren myapp_development / dizinini yerel mysql dizinime kopyaladım. Sonra yerel ibdata1'i yedekledim ve sunucunun ibdata1'ini mysql dizinine kopyaladım. Öldürülen mysqld. ( ps aux
PID'yi bulmak için kill PID
). MySQL yeniden başlatıldı, çökme kurtarma modunda başladı. Sonra benim yerel mysql istemcisi ateş ve gerekli tabloların tam bir dökümü oluşturdu.
Ve sonsuza dek gittiğini düşündüğümüz meta verilere giren haftalarca çalışmayı temsil eden 15.000 satır kaydedildi !!
Umarım bu birine yardımcı olur.
Ne yazık ki yapabileceğiniz çok az şey var, iyi bir yedekleme planına duyulan ihtiyaç hakkında çok değerli bir ders almaktan başka.
Tablo türüne bağlı olarak, verileri diskte bıraktıklarından bir araya getirebilen bir uzman bulabilirsiniz, ancak bu adli analiz çok pahalı olacaktır (nispeten nadir beceriler gerektireceği için) ve hiç garanti edilmez gerçekten yararlı olmak.
Bu MyISAM tablosuysa, sadece / var / log / mysql dosyasındaki veya veri dizininiz ne olursa olsun tablo dosyalarını silmeniz gerekir. Örneğin bunun için ext3grep yardımcı programını kullanabilirsiniz .
"Geri alamazsınız" a DROP TABLE
.
MySQL'in ikili günlüğe kaydetme özelliğinin etkin olup olmadığını görebilir ve görebilirsiniz , belki oradan bazı verileri ayıklayabilirsiniz.
Bunun dışında, MySQL'i unutabilirsiniz ve "Bazı dosyaları yanlışlıkla dosya sistemimden sildim" ile aynı sınıftasınız. Dosyaları kurtarmaya çalışan bazı araçlar var ve bunu profesyonel olarak yapan şirketler de var.
İkili günlük kaydı açıksa, şemanız varsa önce bir tabloyu yeniden oluşturabilirsiniz. Binlog'ları kapalıyken şema oluşturduğunuzdan emin olun. Ya da sadece oturuma geçebilirsiniz. Sonra binlog'ları drop table'ın kendisi olan son ifadeye kadar tekrar oynatabilirsiniz.
Değilse, varsa bir yedek dökümü kullanarak geri yükleyebilirsiniz. Eğer csv dosyalarınız varsa, veriyi kurtarmak için data infile yöntemini yükleyebilirsiniz. Eğer mysqldump kurtarma yapıyorsanız o zaman tam veritabanını geri yüklemek yerine döküm dosyasından tek bir tablo geri yüklemeyi düşünebilirsiniz. Veri boyutu çok büyükse, yüklemeden önce anahtarları devre dışı bırakmayı düşünebilirsiniz, bu geri yükleme işlemini önemli ölçüde artıracaktır.
Gelecek için 10-24 saat gibi bir gecikmiş köleye sahip olmak isteyebilirsiniz. Percona araç setini kullanarak ertelenmiş köle oluşturabilirsiniz (pt-slave-delay)