Soru MySQL geri yüklemesini bir döküm dosyasından nasıl hızlandırabilirim?


Bir mysqldump dosyasından 30 GB'lık bir veritabanını yeni bir sunucudaki boş bir veritabanına geri yüklüyorum. SQL'i döküm dosyasından çalıştırdığınızda, geri yükleme çok hızlı başlar ve daha yavaş ve yavaş olmaya başlar. Bireysel ekler şimdi 15+ saniye alıyor. Tablolar çoğunlukla küçük bir InnoDB ile MyISAM'dır. Sunucunun başka bir etkin bağlantısı yoktur. SHOW PROCESSLIST; sadece ekleme geri yükleme (ve gösteri sürecinin kendisi) gösterir.

Dramatik yavaşlamaya neden olabilecek herhangi bir fikri olan var mı?

Devam ederken geri yüklemeyi hızlandırmak için değiştirebileceğim herhangi bir MySQL değişkeni var mı?


25
2018-05-29 15:37


Menşei


Tablo türlerini düzeltmek için düzenlenmiştir - Dave Forgac


Cevaplar:


Süreci yavaşlatabilecek bir şey var. key_buffer_sizedizin blokları için kullanılan tamponun boyutu. Bunu RAM'inizin en az% 30'una ayarlayın veya yeniden indeksleme işlemi muhtemelen çok yavaş olacaktır.

Referans için, eğer InnoDB ve yabancı anahtarları kullanıyor olsaydınız, yabancı anahtar kontrollerini de devre dışı bırakabilir ve sonunda tekrar etkinleştirebilirsiniz. SET FOREIGN_KEY_CHECKS=0 ve SET FOREIGN_KEY_CHECKS=1).


24
2018-05-29 16:00



İki şey buldum: key_buffer_size 8MB olarak ayarlandı ve yabancı anahtarlarla karıştırılmış bir InnoDB tablosu vardı. Key_buffer_size değerini 1GB'a artırdı ve geçici olarak yabancı anahtar kontrollerini kapattı. Geri yükleme 5 dakika içinde bitti. Teşekkürler! - Dave Forgac
Vaov! Yardım ettiğine sevindim :) - Marco Ramos
Sadece '5' dakika yazdığımı fark ettim. Oldukça eminim 50 dakika gibi ama yine de daha makul ;-) - Dave Forgac
key_buffer_size MYISAM içindir. - Fernando Fabreti
@FernandoFabreti - bu, birçok okuyucu için önemli bir nokta, ancak OP çoğunlukla MyISAM'a sahip olduklarını belirtti - mc0e


Bu bağlantı, geri yükleme işlemini hızlandırmak için neler yapabileceğini gösterir.

http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html

Biri, dökümü dosyanın üst kısmına koydu

SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;

Ve bu ifadeleri döküm dosyasının sonunda koy

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET AUTOCOMMIT = @OLD_AUTOCOMMIT;
COMMIT;

Bu benim için çalıştı. Mutlu geri :-)


20
2018-01-20 06:14



Bu oldukça yardımcı oldu. Dosyayı düzenlemek yerine, yukarıdaki snippet'lerden pre.sql ve post.sql komutlarını oluşturup db'yi geri yüklemek için kullandım: cat pre.sql dump.sql post.sql | mysql ... - Jason R. Coombs


Geri yükleme işleminin yavaş yavaş neden yavaşlayacağını anlatabilmem için tek neden indeksleme. Endekslemeyi sonuna kadar kapatmayı araştırın ve daha sonra tüm partiyi bir kerede yapmasına izin verin.


1
2018-05-29 21:23





Döküm dosyasının (DB dizini) fiziksel kopyasına sahipseniz, yeni sunucu aynı MySQL sürümüne sahipse yeni sunucuya kopyalayabilir ve iyi çalışır. Bu çalışma MyISAM ile gayet güzel ve benim için mantıksal SQL dökümü dosyasına dayanan verileri geri yüklemekten daha iyi olduğunu düşünüyorum.


1
2018-06-16 11:08





Birden fazla tablonuz varsa, bundan faydalanabilirsiniz. mk-paralel-geri.


0
2018-05-29 18:24



Bu şimdi kullanımdan kaldırılmıştır ve yalnızca gerçek yedekleri geri yüklemek için değil, test verilerini geri yüklemek için kullanılmalıdır. - svandragt


Seni önerdim

  1. Tablolarınızı kontrol edin: Tetikleyicileri var mı? Tüm tetikleyicileri temizle
  2. SET: AUTOCOMMIT=0, UNIQUE_CHECKS=0, FOREIGN_KEY_CHECKS=0 (VE DEĞİŞTİRMEK İÇİN BU DEĞİŞTİRMELERİ UNUTMAYIN)
  3. COMMAND LINE LIKE KULLANIN mysql -u root -pPasss requests < mydb.sql
  4. Veritabanı dosya boyutunuzu kontrol edin

İyi şanslar


-1
2017-07-26 21:56