MySQL veritabanı .myd, .myi, .frm dosyalarından nasıl kurtarılır


183

Nasıl benim MySQL veritabanlarının birini geri yüklemek için .myd, .myi, .frmdosyalar?


10
Buna cevap versem de, gerçekten Serverfault'a ait.
derobert

31
@chandrajeet en çok oy alan cevabı gerçekten kabul etmelisin.
Kule

2
Hey chandrajeet, neden derobert'in cevabını kabul etmiyorsun? Benim için de işe yaradığını onaylıyorum. Senin için değil mi? stackoverflow.com/help/someone-answers
Taz

Yanıtlar:


173

Bunlar MyISAM tablolarıysa, .FRM, .MYD ve .MYI dosyalarını bir veritabanı dizinine (örn. /var/lib/mysql/dbname) Yerleştirmek bu tabloyu kullanılabilir hale getirir. Geldikleri veritabanı, aynı sunucu, aynı MySQL sürümü veya aynı mimari olması gerekmez. Klasörün sahipliğini de değiştirmeniz gerekebilir (örn. chown -R mysql:mysql /var/lib/mysql/dbname)

İzinlerin ( GRANTvb.) mysqlVeritabanının bir parçası olduğunu unutmayın . Bu yüzden tablolarla birlikte geri yüklenmeyecekler; GRANTkullanıcılar oluşturmak, erişim vermek vb. için uygun ifadeleri çalıştırmanız gerekebilir ( mysqlVeritabanını geri yüklemek mümkündür, ancak MySQL sürümlerine ve mysql_upgradeyardımcı programın gerekli tüm çalışmalarına dikkat etmeniz gerekir .)

Aslında, muhtemelen sadece .FRM (tablo yapısı) ve .MYD'ye (tablo verileri) ihtiyacınız vardır, ancak .MYI'yi (dizinler) yeniden oluşturmak için tabloyu onarmanız gerekir.

Tek kısıtlama, sürüm düşürüyorsanız sürüm notlarını kontrol etmeniz (ve muhtemelen onarım tablosunu çalıştırmanız )dır. Yeni MySQL sürümleri elbette özellikler ekler.

[Açık olsa da, tabloları karıştırır ve eşleştirirseniz, bu tablolar arasındaki ilişkilerin bütünlüğü sizin probleminizdir; MySQL umursamaz, ancak uygulamanız ve kullanıcılarınız olabilir. Ayrıca, bu yöntem InnoDB tabloları için hiç çalışmaz. Yalnızca MyISAM, ancak sahip olduğunuz dosyaları göz önünde bulundurarak MyISAM'iniz var]


Bu, information_schema tablosuna uygun girdileri eklemeden gerçekten işe yarar mı? Yani bu dosyaları aramak için MySQL bilmeli, değil mi?
Zenshai

4
Information_schema tabloları aslında mevcut değildir, yalnızca dahili veritabanı durumuna ilişkin görünümlerdir. Bkz. Dev.mysql.com/doc/refman/5.0/en/information-schema.html
brian-brezilya

4
Vay be, kirli hissettim, ama tüm dizini bir MySQL4 yükleme olduğunu düşündüğümden bırakarak MySQL5.1'e sadece sihirli bir şekilde tabloları yeniden oluşturduk. Yeniden başlatma veya herhangi bir şey yok (pencerelerde).
Dave

4
Çalışmak için sadece hatırlamak gerekir (her tablo için): check table sometable; ve sonra onarım çalıştırmak (sadece gerekirse): repair table sometable;
Nux

3
Bu harika çalıştı! Dosyaları yerine koymuştum, ancak sahipliğini "mysql: mysql" olarak değiştirene kadar mysql onları "görmüyordu".
sean.boyer

26

MYI dosyasını yeniden oluşturmak istiyorsanız, ONARIM TABLOSU doğru kullanımının:

REPAIR TABLOSU bazı USE_FRM;

Aksi takdirde muhtemelen başka bir hata alırsınız.


24

Bunun için bir çözüm buldum. Windows 7'de MySQL 5.1 veya 5.6 kullanıyorum.

  1. Kopya .frm dosyası ve ibdata1 ": \ Program Data \ MySQL \ MSQLServer5.1 \ Data C" üzerinde kurulmuştur eski dosyadan
  2. Geçerli SQL örneğindeki SQL sunucusu örneğini durdurma
  3. "C: \ Program Data \ MySQL \ MSQLServer5.1 \ Data" adresinde bulunan veri klasörüne gidin
  4. Kurtarmak istediğiniz dosyadan ibdata1 ve .frm dosyasını içeren veritabanınızın klasörünü yapıştırın .
  5. MySQL örneğini başlatın.

Bu kurtarma için .MYI ve .MYD dosyasını bulmanıza gerek yoktur.


Bu adımları takip edin (her şey başarısız olduktan sonra) ve innodb_force_recovery = 4düzeyi kullandı (bu durumda gerekli olduğundan emin değilim). Çok şükür!
Joshua Stewardson

6
Bilginize: ibdata1InnoDB, MyISAM değil.
derobert

14

Dikkat edilmesi gereken bir şey:

.FRM dosyasında tablo yapınız vardır ve MySQL sürümünüze özgüdür.

.MYD dosyası sürüme özgü DEĞİLDİR, en azından küçük sürümler değildir.

.MYI dosyası özeldir, ancak REPAIR TABLEdiğer yanıtların söylediği gibi dışarıda bırakılabilir ve yeniden oluşturulabilir .

Bu cevabın amacı, tablolarınızın şema dökümü varsa, bunu tablo yapısını oluşturmak, ardından bu .MYD dosyalarını yedeklemelerinizle değiştirmek, MYI dosyalarını silmek ve onarmak için kullanabileceğinizi bilmektir. herşey. Bu şekilde yedeklerinizi başka bir MySQL sürümüne geri yükleyebilir veya veritabanınızı kullanmadan tamamen taşıyabilirsiniz mysqldump. Büyük veritabanlarını taşırken bu süper yararlı buldum.


14

Basit! Sahte bir veritabanı oluşturma (abc deyin)

Tüm bu .myd, .myi, .frm dosyalarını mysql \ data \ abc'ye kopyalayın; burada mysql \ data \, tüm veritabanları için .myd, .myi, .frm'nin depolandığı yerdir.

Sonra phpMyadmin'e gidin, db abc'ye gidin ve veritabanınızı bulun.


en kısa ve kesin cevap
Serak Shiferaw

Verileri kurtarmanın en iyi yolu ... WAMP'ı kurdum, sonra yeni bir veritabanı oluşturdum, dosyaları yeni veritabanı dizinine kopyalayın C: \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase phpmyadmin'i ve yeni veritabanınızı açın, Verilere bakın
Alexandre georges

7

Sanırım .myi mysql içinden onarabilirsin.

MySQL'den şu tür hata mesajları görürseniz: Veritabanı sorgusu (sorgu) yürütülemedi 1016: Dosya açılamıyor: 'sometable.MYI'. (errno: 145) Hata iletisi: 1034: Tablo için yanlış anahtar dosyası: 'sometable'. Muhtemelen çökmüş veya bozuk bir masa var sonra tamir etmeye çalışın.

Tabloyu aşağıdaki gibi bir mysql isteminden kontrol edip onarabilirsiniz:

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+

ve şimdi masanız iyi olmalı:

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+

6

Dosyaları bir .sqldosyaya dönüştürmek için bir çözüm buldum (daha sonra .sqldosyayı bir sunucuya alabilir ve veritabanını kurtarabilirsiniz), /vardizine erişmeye gerek kalmadan , bunu yapmak için bir sunucu yöneticisi olmanız gerekmez.

Bilgisayarınızda XAMPP veya MAMP kurulu olması gerekir.

  • XAMPP'yi kurduktan sonra, kurulum dizinine (Genellikle C:\XAMPP) ve alt dizine gidin mysql\data. Tam yolC:\XAMPP\mysql\data
  • İçinde, oluşturduğunuz diğer veritabanlarının klasörlerini göreceksiniz. Kopyala ve tam bir klasör yapıştırın .myd, .myive .frmorada dosyaları. Bu klasörün yolu

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • Ardından localhost/phpmyadminbir tarayıcıda ziyaret edin . mysql\dataKlasöre yapıştırdığınız veritabanını seçin ve gezinme çubuğunda Dışa Aktar'ı tıklayın. Dışa aktarmayı bir .sqldosya olarak seçer . Daha sonra dosyanın nereye kaydedileceğini soracaktır.

Ve işte bu! Artık bir var (olmalı) .sqlaslen veritabanını içeren dosyayı .myd, .myive .frmdosyaları. Daha sonra yeni bir veritabanı oluşturarak ve gezinme çubuğunda 'İçe Aktar' düğmesine basarak ve ardından içe aktarma adımlarını izleyerek phpMyAdmin aracılığıyla başka bir sunucuya aktarabilirsiniz.


5

Dosyaları, mySQL'in EXACT ile aynı sürümü olduğu sürece, veri klasörünün uygun şekilde adlandırılmış bir alt dizin dizinine kopyalayabilir ve bu dizindeki ilişkili tüm dosyaları koruyabilirsiniz. Tüm dosyalara sahip değilseniz, sorun yaşayacağınızdan eminim.


MySQL'in EXACT ile aynı sürümüne sahip değilsem ne yapmalıyım?
Jo Sprague


2

Yukarıdaki açıklama benim için işler (muhtemelen yoğun veya tembel) almak için yeterli değildi, bu yüzden gelecekte bana yardımcı olmak için cevap bulduktan sonra bu komut dosyası oluşturdu. Umarım başkalarına yardımcı olur

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;

-2

MySql Workbench yüklemesi içindeki konumu değiştirmedikçe, Windows XP ve MySQL sunucusu 5.5 yüklü olanlar için - veritabanının konumu C: \ Documents and Settings \ Tüm Kullanıcılar \ Uygulama Verileri \ MySQL \ MySQL Server 5.5 \ data'dır. GUI.


3
Soru, bu dosyaların Windows XP MySQL 5.5'te nerede bulunabileceği değil, belirli dosya türlerinden kurtarma ile ilgilidir.
Danpe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.