MySQL veritabanını fiziksel dosyalardan geri yükleme


140

MySQL veritabanını fiziksel veritabanı dosyalarından geri yüklemek mümkün mü? Aşağıdaki dosya türlerine sahip bir dizin var:

client.frm
istemcisi.MYD
istemcisi.MYI

ama yaklaşık 20 tablo için.

Ben genellikle bu tür dosyaları ile başa çıkmak için yolu nedir 1 SQL dosyasında her şeyi almak için mysqldump veya benzer bir araç kullanın?


Aynı sorun var: uzantıları FRM, MYD ve MYI ile birden fazla dosya. Ayrıca ib_logfile0, ib_logfile1 ve ibdata1 dosyalarım var. Çalışan bir sunucuya erişemiyorum veya döküm oluşturamıyorum. Yeni bir MySQL sunucusu çalıştırmayı ve dosyaları kullanmayı denedim ama başarılı olamadım ... Herkesin nasıl yapılacağı açık mı?
flo5783

Yanıtlar:


132

MySQL MyISAM tablosu üç dosyanın birleşimidir:

  • FRM dosyası tablo tanımıdır.
  • MYD dosyası gerçek verilerin saklandığı yerdir.
  • MYI dosyası, tabloda oluşturulan dizinlerin depolandığı yerdir.

Veritabanı klasörünüze kopyalayarak geri yükleyebilmeniz gerekir (Linux'ta varsayılan konum /var/lib/mysql/)

Sunucu çalışmazken yapmalısınız.


64
bu yalnızca MyISAM tabloları için geçerlidir. InnoDB, tablolarını ve dizinlerini varsayılan olarak ibdata1, ib_logfile0 ve ib_logfile1 dosyalarından oluşan tek bir tablo alanında * saklar. bir veritabanını geri yüklemek için bu dosyalara da ihtiyacınız olacaktır. * tablo başına tablo alanları mümkündür, ancak varsayılan değildir
ax.

21
.Frm .myi ve .myd dosyaları olduğunu söylüyor. Daha sonra MyISAM tabloları olduğunu varsaydım.
Vincent

5
Değerli cevap, ama işlerin iyi çalışması için bir adım daha ileri gitmeliydim: dosyaları geri yüklemek için kök olarak oturum açmam gerektiğinden mysql, mysqldişlemi çalıştıran kullanıcı bunlara erişemedi. Bir yapmak chmod -R mysql:mysql .MySQL veri dizini üzerinde hızlı ve kolaydır, ama bütün resoterd DBs var gibiydi neden bundan önce, hiçbir tablo biraz daha uzun sürdü, endam.
Edurne Pascual

10
herenvardo Sanırım chmod değil chown demek istedim
Oliver M Grech

2
Önemli notlardan bazılarını özetlemek için chown, kopyalanan dosyalara şu şekilde sahip olmanız gerekebilir :sudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr

50

@Vicent'in cevabından MySQL veritabanını aşağıdaki gibi geri yükledim:

Adım 1. Mysql sunucusunu kapatma

Adım 2. Veritabanı klasörünüzdeki veritabanını kopyalayın (Linux'ta varsayılan konum / var / lib / mysql'dir). Veritabanının aynı adını ve aynı veritabanı adını mysql modunda tutun.

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

Adım 3: Klasörü kendiniz değiştirin ve modu değiştirin:

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

Adım 4: Veritabanı klasörünüze ibdata1'i kopyalayın

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

Adım 5: Veritabanı klasörünüze ib_logfile0 ve ib_logfile1 dosyalarını kopyalayın.

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

Kendi dosyalarınızı değiştirmeyi ve bu dosyaların kök dizinini değiştirmeyi unutmayın:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

veya

sudo chown -R mysql:mysql /var/lib/mysql

Adım 6 (İsteğe bağlı): Sitem belirli bir konumda dosyaları saklamak için yapılandırmaya sahip, sonra bunları tam olarak ilgili konuma kopyalarım.

Adım 7: Mysql sunucunuzu başlatın. Her şey geri gelip tadını çıkarın.

İşte bu.

Daha fazla bilgi için: https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/


4
Ayrıntılı adım adım talimatlar için +1. Ama ne olması gerektiğini gerçekten yansıtmak için bazı ifadeler düzenledim.
Peter

# 1932 Hatası var, verilere erişilemiyor. Veritabanları görünür, ancak verilere erişilemez. MAC OS X Mojave'de XAMPP 7.2.12 çalıştırılıyor.
Steve1754a

@ Steve1754a hata birçok nedenden dolayı olabilir 1. Mac OS'den Mac OS'ye bir veritabanı taşıyor musunuz? 2. Lütfen bu dosyaların / verilerin / tabloların iznini kontrol edin
biolinh

Cevaplar: 1. Evet; 2. Yaptım. Benim DB tam bir yeniden inşa etmek zorunda kaldı. Bir çözüm bulunamadı. Hikayeye ahlaki: her zaman DB'nin bir yedeğini oluşturun. Keşke bunu otomatik olarak XAMPP'de yapmanın kolay bir yolu olsaydı.
Steve1754a

1
hayatımı kurtardın
SpongePablo

8

Eğer klasörü geri yüklüyorsanız mysql: mysql dosyalarını chown unutmayın

chown -R mysql:mysql /var/lib/mysql-data

aksi takdirde bir veritabanı bırakmaya veya yeni sütun vb eklemek çalışırken hata alırsınız.

ve MySQL'i yeniden başlatın

service mysql restart

2
bu gerçekten sorunun cevabı değil ama çok yardımcı oldu.
16:20

aslında mysql için her şeyi chown olmamalıdır, mysql veritabanı klasörü kök grubu korumak gerekir
Galvani

8

Ben de aynı sorun var ama başarıyla yukarıdaki talimatlara göre, veritabanı kurtarmak mümkün değildi.

Yalnızca Ubuntu işletim sistemimdeki mysql veritabanı klasörlerini kurtarabildim. Benim sorunum bu okunamayan mysql veri klasörleri ile benim veritabanı kurtarmak. Bu yüzden geliştirme ortamı için win7 işletim sistemine geri döndüm.

* NOT Win7 içinde çalışan mevcut bir veritabanı sunucum var ve kurtarılan dosyalardan almak için sadece birkaç veritabanı dosyasına ihtiyacım var. Ubuntu işletim sisteminden başarıyla veritabanı dosyalarını kurtarmak için eski veritabanı sunucusundaki her şeyi kurtarmak için mysql veritabanı sunucusunu (win7 işletim sistemindeki Ubuntu işletim sisteminden aynı sürüm) yeni yüklemem gerekiyor.

  1. Kurtarılan dosyalardan başka bir yeni mysql veritabanı sunucusu aynı sürümünü yapın.

  2. MySQL sunucusunu durdurma

  3. kurtarılan klasörü kopyalayın ve (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data) mysql veritabanına yapıştırın.

  4. linux mysql yüklü klasöründe bulunan ibdata1 dosyasını kopyalayın ve yapıştırın (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data). Sadece mevcut olanın üzerine yazın veya değiştirmeden önce yedekleyin.

  5. mysql sunucusunu başlatın ve veritabanı dosyalarını başarıyla kurtarıp kurtarmadığınızı kontrol edin.

  6. Kurtarılan veritabanını şu anda kullanılan mysql sunucumda kullanmak için sadece kurtarılan veritabanını dışa aktarın ve mevcut mysql sunucumu içe aktarın.

Umarım bunlar yardımcı olur, çünkü benim için başka hiçbir şey işe yaramadı.


1
yöntemi ayrıca ibdata1, ib_logfile0 ve ib_logfile1 dosyaları ve veritabanı klasörü ile ubuntu / debian üzerinde de çalışır. kullanıcı kopyalanmayacak, ancak daha sonra veritabanına yeni bir kullanıcı ekleyebilir ve onunla birlikte dökebilirsiniz.
bokorben

2

MySql 5.1 (Win7) ile. DB'leri (InnoDbs) yeniden oluşturmak için aşağıdaki dizinlerin tüm içeriğini değiştirdim (my.ini params):

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

Bundan sonra MySql Hizmetini başlattım ve her şey yolunda gidiyor.


1

Evet öyle! Bunları veritabanı klasörünüze (işletim sistemine bağlı olarak) ekleyin ve "MySQL Düzeltme İzinleri" gibi bir komut çalıştırın. Bu veritabanını yeniden sakladı. Ayrıca dosyalarda doğru izinlerin ayarlandığını da görün.


Ben yaptım, ama tabloları tanımıyor. Önceki cevap hakkındaki yorumumda söylediğim gibi.
orezvani

0

Bir kez bu dosyaları çalışan bir mysql veritabanı için veritabanı depolama klasörüne kopyaladı, db başlattı ve "dosyaları onarmak" için bekledi, sonra mysqldump ile onları ayıkladı.


-1

Benim durumumda, sadece / var / lib / mysql içindeki tc.log dosyasını kaldırmak mariadb / mysql dosyasını tekrar başlatmak için yeterliydi.


Bu mysql sunucusunu başlatmak / yeniden başlatmak mümkün değildir.
Oluwatumbi
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.