MySQL DB'yi yedeklemek için en iyi yöntemler


23

Son zamanlarda MySQL'i çalıştıran üretim web sunucularımızın düzenli olarak (veya hiç) yedeklenmediğini keşfettim. SQL Server DB'leri yedeklemeye alışkınım ama MySQL DB'lerle ilgili tonlarca deneyimim yok. 'Mysqldump' veya başka bir DB yedekleme aracını kullanmak için en iyi yöntemler?

Muhtemelen her gece yapılan ve sonra yedekleme sistemimle dosyaları yedekleyeceğim şekilde zamanlamayı cron job'a getireceğim.

Teşekkürler.

Yanıtlar:


29

MySQL sunucusu yedeğini almak için En İyi Uygulamalar:

MySQL Çoğaltma

MySQL'de Kurulum Çoğaltması. Master ve Slave sunucusunu kurmanız gerekecek. DB'ye okunan tüm yazılar Slave Sunucunuza gidebilir. Replikasyona sahip olmanın avantajı, Master sunucuyu kesintiye uğratmadan köle sunucunuzdan yedek alabilmenizdir, uygulamanız herhangi bir kesinti olmadan Master'da çalışmaya devam edecektir.

MySQL Dökümünü Kullanma

Veri kümeniz küçükse ("küçük" ifadesinin göreceli bir terim olduğunun farkındayım .. nitelemek için <10 GB) diyelim, mysqldump muhtemelen harika çalışacaktır. Çok kolay, çevrimiçi ve çok esnek. Sadece mysqldump'un yapabileceği birkaç şey: her şeyi veya sadece belirli veritabanlarını veya tabloları yedekle, yalnızca DDL'yi daha hızlı geri yüklemek için dökümü optimize et, sonuçta ortaya çıkan sql dosyasını diğer RDBMS'lerle ve daha birçok şeyle daha uyumlu hale getirin.

Ancak, en önemli seçenekler yedeklemenizin tutarlılığı ile ilgilidir. Favori seçeneklerim: - tek işlem: bu seçenek, tablolar InnoDB depolama motorunu kullanıyorsa (ve sadece ise) tutarlı bir yedekleme sağlar. Salt okunur olmayan MyISAM tablolarınız varsa, bunları yedeklerken bu seçeneği kullanmayın. --master-data = 2: bu seçenek dökümünüzün tutarlı olmasını sağlar (--ingle-işlem seçeneğini eklemediğiniz sürece tüm tabloları kilitleyerek). --Master-data seçeneği ayrıca sonuçtaki döküm dosyasına ikili günlük konumunu da kaydeder (= 2, bu satırın döküm dosyasında bir yorum olmasına neden olur)

Mysqldump ile ilgili son not: geri yükleme süresinin, yedekleme süresinden önemli ölçüde daha uzun olabileceğini unutmayın. Örneğin, kaç tane endekse sahip olduğunuz birkaç faktöre bağlı olacaktır.

LVM anlık görüntüsü

Daha büyük veri kümeleri olanlar için, fiziksel bir yedekleme yoludur. Soğuk bir yedekleme alabilmenize rağmen (örneğin, MySQL hizmetini kapatın, veri dizinini kopyalayın, hizmeti yeniden başlatın), çoğu kişi çalışmama süresi istemiyor. En sevdiğim çözüm anlık görüntüler. Bu sıcak olabilir (InnoDB için) veya kısa bir kilit (MyISAM için) gerektirebilir. Tüm verilerinizi eklemeyi unutmayın (ib_logfiles dahil). Lenz bu konuda yardımcı olmak için güzel bir yardımcı program sunar: http://www.lenzg.net/mylvmbackup/

MySQL Kurumsal Yedeklemeyi Kullanma

MySQL Kurumsal Yedekleme kullanmanın avantajları:

  • InnoDB tablolarının "Sıcak" Yedekleri, yalnızca belirli tabloları veya tablo alanlarını yedeklemeyi engellemeden tümüyle çevrimiçi olarak gerçekleştirilir
  • Yalnızca önceki bir yedeklemeden bu yana değişen verileri yedekle
  • Sıkıştırılmış Yedekleme - Depolama alanını% 90 ve daha fazlasına kadar korur ..

Referans: http://www.mysql.com/products/enterprise/backup/features.html http://www.mysql.com/products/enterprise/backup.html


7

Yedekleme için kullanılacak özel bir kopya ayarlamanızı tavsiye ederim . Bu, birincil işlemi etkilemeden tüm yedekleme görevlerini gerçekleştirmenizi sağlar. Bu, mimarinize karmaşıklık eklediğinden, her şeyin çalıştığından emin olmak için çoğaltma gecikmesini izlemek isteyeceksiniz.

Asıl sürece gelince, üçüncü taraf araçlara gerek duymadan bir çift seçeneğiniz var. Anlık kullanılarak alınabilir mysqldumpkomutu (eğer InnoDB kullandığınızı varsayıyoruz): mysqldump --all-databases --single-transaction > all_databases.sql. Veri boyutuna bağlı olarak, MySQL'in kapatılması ve veri dosyalarının doğrudan yedeklenmesi tercih edilebilir. Çoğaltma yeniden başlatıldığında, kapatıldığı süre içinde birincil alınan tüm olayları tekrar eder. MySQL Enterprise kullanıyorsanız, mysqlbackupyardımcı program bunu yapar.

Çoğaltmadaki ikili günlük etkinleştirilerek artan yedeklemeler alınabilir . Açıkçası, bu yalnızca verileri değiştiren olayları kaydeder; bu nedenle, yukarıdaki fotoğraflarla birleştirmeniz gerekir.


3
İçin +1 --single-transactionekleyin ancak eklemeyi unutmayın --events --routinesve --triggersvarsayılan olarak etkin olmasına rağmen, her zaman da kullanıyorum , çünkü my.cnf dosyasında devre dışı bırakılabilir. Veritabanınızda şu anda bu tür nesnelerin olup olmadığına bakılmaksızın bunları standart uygulama olarak kullanmak her zaman iyidir.
Michael - sqlbot

Not mysqldump - all-veritabanları, tanımlanmış azami açık tablo ayarı düşük olduğunda hataları tetikleyebilir. öyleyse mysql.log dosyasına göz kulak ol. Çoğaltma gerçekten en iyi yedekleme yolu olurdu
Raymond Nijland 27.03.2013

O zaman verilerin tarihsel kopyalarını nasıl saklıyorsunuz? (Genellikle, bir müşteri bir ay veya daha fazla yedekleme yedeği ister ve bir uygulama hatası verileri bozduğunda, geliştiriciler db'nin bir hatadan önceki kopyasını
isterler
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.