Nasıl benim MySQL veritabanlarının birini geri yüklemek için .myd
, .myi
, .frm
dosyalar?
Nasıl benim MySQL veritabanlarının birini geri yüklemek için .myd
, .myi
, .frm
dosyalar?
Yanıtlar:
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 ( GRANT
vb.) mysql
Veritabanının bir parçası olduğunu unutmayın . Bu yüzden tablolarla birlikte geri yüklenmeyecekler; GRANT
kullanıcılar oluşturmak, erişim vermek vb. için uygun ifadeleri çalıştırmanız gerekebilir ( mysql
Veritabanını geri yüklemek mümkündür, ancak MySQL sürümlerine ve mysql_upgrade
yardı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]
check table sometable;
ve sonra onarım çalıştırmak (sadece gerekirse): repair table sometable;
Bunun için bir çözüm buldum. Windows 7'de MySQL 5.1 veya 5.6 kullanıyorum.
Bu kurtarma için .MYI ve .MYD dosyasını bulmanıza gerek yoktur.
innodb_force_recovery = 4
düzeyi kullandı (bu durumda gerekli olduğundan emin değilim). Çok şükür!
ibdata1
InnoDB, MyISAM değil.
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 TABLE
diğ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.
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.
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 |
+------------------+-------+----------+----------+
Dosyaları bir .sql
dosyaya dönüştürmek için bir çözüm buldum (daha sonra .sql
dosyayı bir sunucuya alabilir ve veritabanını kurtarabilirsiniz), /var
dizine erişmeye gerek kalmadan , bunu yapmak için bir sunucu yöneticisi olmanız gerekmez.
Bilgisayarınızda XAMPP veya MAMP kurulu olması gerekir.
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
, .myi
ve .frm
orada dosyaları. Bu klasörün yolu
C:\XAMPP\mysql\data\foldername\.mydfiles
Ardından localhost/phpmyadmin
bir tarayıcıda ziyaret edin . mysql\data
Klasöre yapıştırdığınız veritabanını seçin ve gezinme çubuğunda Dışa Aktar'ı tıklayın. Dışa aktarmayı bir .sql
dosya olarak seçer . Daha sonra dosyanın nereye kaydedileceğini soracaktır.
Ve işte bu! Artık bir var (olmalı) .sql
aslen veritabanını içeren dosyayı .myd
, .myi
ve .frm
dosyaları. 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.
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.
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
İb_ * dosyalarını yeniden adlandırdığını söylüyor. Ben yaptım ve bana db geri verdi.
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;
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.