Bütçede aksamayan MySQL yedeklemeleri


14

Geçerli MySQL yedekleme senaryom, db ikinci bir sunucuya çoğaltmak ve tablo veya satır kilitleme herhangi bir kesinti kaldırmak için o sunucuda mysqldump çalıştırmaktır. Bu iyi çalışıyor ama ikinci sunucu için aylık 150 $ maliyeti (Avustralya barındırma ABD'den çok daha pahalı.)

Burada bununla ilgili birçok soru okudum, çoğu insan planlanan yedeklemelerle ilgili yardıma ihtiyaç duyuyor ve neye ihtiyacım yok. Kesinti olmadan mysqldump (tercihen her 4 saatte bir) gerekir. Db ~ 7GB sıkıştırılmamış olduğundan, mysqldump sunucuya bağlı olarak biraz zaman alabilir.

Aynı makineye kopyalamayı düşündüm, ama kölenin çok ihtiyaç duyulan belleğe yemesini istemedim. Bellek kullanımını db bazında kısıtlayabilirim emin değilim? Her iki durumda da, bu db boşaltma sırasında sunucuya yük koyacaktır.

Ben sadece bu http://www.zmanda.com/quick-mysql-backup.html okudum ve iyi görünüyor, yılda 300 $ tamam, bu beni çok kurtarır.

Ne yazık ki Amazon'un RDS'ye çoğaltılamıyorum ama bir mikro RC2 örneğine çoğaltılabilirim ama çoğaltma aşırı net gerçekleşecek ve ping ~ 220ms.

Burada birkaç insanın iyi bir seçenek olabilecek LVM anlık görüntüleri hakkında konuştuğunu gördüm. Bu seçenek hakkında pek bir şey bilmiyorum tho.

Görüşler çok takdir edilecektir.


Web sitesi nedir? What it does
jamespo

Ayda 150 dolardan çok daha ucuza sunucu satın alabilirsiniz. 7GB çok fazla veri gibi gelmiyor. Tek kullanımlık 128MB'lık sunucuları ayda 1.50 $ 'a kadar ve 1GB'lık sunucuları ise yaklaşık 20 $' a satın alabilirsiniz . Bir sorgu önbelleğine gerek olmadığından, bir GB RAM ve SSD'li bir sunucu ile birçok yazıyı kolayca işleyebilirsiniz.
Xeoncross

Önce sunucuyu kapatmazsanız LVM anlık görüntüleri tutarlı bir görüntü vermez. Sıcak anlık görüntüler yapabilir ve dosyaları yeniden oluşturmaya çalışabilirsiniz - ancak risklidir.
symcbean

Yanıtlar:



5

Innodb veya tamamen işlemsel başka bir arka uç kullanıyorsanız, kullanabilirsiniz mysqldump --single-transaction .... Bunu iyi sonuçlarla oldukça büyük (~ 100GB) veritabanlarında kullandım; veritabanı ağır yük altında ise saatler sürebilir, ancak tablolarınızı kilitlemeden çalışır. Çoğaltma genellikle daha iyidir, ancak bazen güzel bir sağlam döküm dosyası istersiniz. Bir mysql çoğaltma slaveini de atabileceğinizi unutmayın.

Mysqldump sayfasından (işleme sızacak işlemler hakkında dikkat edin):

 ·   --single-transaction

   This option sends a START TRANSACTION SQL statement to the server
   before dumping data. It is useful only with transactional tables
   such as InnoDB, because then it dumps the consistent state of the
   database at the time when BEGIN was issued without blocking any
   applications.

   When using this option, you should keep in mind that only InnoDB
   tables are dumped in a consistent state. For example, any MyISAM or
   MEMORY tables dumped while using this option may still change
   state.

   While a --single-transaction dump is in process, to ensure a valid
   dump file (correct table contents and binary log coordinates), no
   other connection should use the following statements: ALTER TABLE,
   CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE. A
   consistent read is not isolated from those statements, so use of
   them on a table to be dumped can cause the SELECT that is performed
   by mysqldump to retrieve the table contents to obtain incorrect
   contents or fail.

Joshua, 'kendim' yazım tipini fark ettim ve 'kendim' yazmayı çok zor bulduğuma dikkat ediyorum çünkü doğal olarak mysql yazıyorum. Şu anda köle makinesinde 4 saatte bir mysqldump yapıyorum. tek işlem iyi bir seçenek gibi görünüyor, teşekkürler!
Christian

Hamuru. İyi yakaladın. :)
Joshua Hoblitt

Böyle büyük bir veritabanında mysqldump iyi bir seçenek olduğunu düşünmüyorum. Dökümü saatler alırsa, geri yüklemesi haftalar alabilir. Geri yükleme sürenizi ve tamamlamak için gereken kaynakları test edin!
Baron Schwartz

Teşekkürler Baron, geri yüklemek biraz zaman alıyor - haftalar değil, ama yine de hatırı sayılır bir zaman. Yeni sunucumu almamın ne kadar sürdüğünü göreceğim. Belki dosyaların bir kopyası çok daha etkili olacaktır.
Christian

2

ABD'de ucuz bir VPS ile yüksek gecikme bağlantısı üzerinden çoğaltma konusunda bir sorun görmüyorum. Çoğaltma, bir köle saatlerce geride kalsa bile çabucak yetişebilecek şekilde tasarlanmıştır , yani eşzamansız olarak çalışabilir.

Sürece Avustralya hosting planında bu kadar giden bant genişliği dayanabilir.

Yüksek gecikmenin önemli olup olmayacağı konusunda çok daha ayrıntılı bir cevap


1
Ne kadar bant genişliği kullanacağını bile bilmiyordum. Belki de ne kadar kullanıldığını görmek için şimdi sahip olduğum kutular arasındaki trafiği izlemeliyim.
Christian

1
EBS üstünde mysql çalıştırmaya çalışırken "hayal kırıklığına" olabilir. Çoğaltma için kullanmaya çalışmadan önce performansı test etmenizi şiddetle tavsiye ederim.
Joshua Hoblitt

Bunun için teşekkürler, güvenmeye başlamadan önce kesinlikle bir his alacak - eğer bu benim yaklaşımımsa.
Christian

1

Gerçekçi olarak, veritabanını gerçekten dışa aktarmak için gereken süre kesinti olacaktır. Yeterince yavaş bir süre boyunca yapın ve herhangi bir sorun olmamalıdır. Bu bütçeyle ilgili bir BT departmanı gerçekten ne bekliyor?

7 GB'lık bir veritabanını 5-10 dakika MAX içinde mysqldump yapabilmeniz, okuma / yazma kilidini açabilmeniz ve kesinti süresinin sona ermesi gerekir. Daha sonra yeni sunucuya 7GB dosya için en bant genişliği etkili yolu bulabilirsiniz (okuma: YÜKSEK SIKIŞTIRMA). Dosyayı yeni sunucuda MySQL'e aktarıp almak için bolca zamanınız var. Ardından, masterlog bilgilerini girin ve çoğaltmayı başlatın. Çocuk oyuncağı olmalı!

MySQL belgeleri harika : http://dev.mysql.com/doc/refman/5.0/en/replication.html


Ve eklemek istedim, çoğaltma çok fazla bant genişliği kullanmıyor. Hiç şüphe yok ki her dört saatte bir mysqldump-ing daha iyi bir çağrı !!!
Luke

BT departmanından kim bahsetti? Bu sadece benim web sitem. :) Ve şu anda yedeklemeler için çoğaltıyorum ama emin değilim onun en iyi yaklaşım $ 150 p / m. Belirtildiği gibi bir EC2 mikro örneği seçeneği vardır.
Christian

@Christian p / m nedir? Ne olduğunu bilmiyorum, ama 150 $ m başına tek bir p pahalı görünüyor 8- |
TehShrike

@TehShrike, p / m = aylık. Avustralya hosting ABD hosting çok daha pahalı. Ayrıca, bant genişliği ödenmesine karşı sayılmayan hız ve aktarımlar için ikinci sunucuyu aynı ağda tutmaya çalışıyordum.
Christian

1

Bellek kullanımını db bazında kısıtlayabileceğimden emin değilim

Tabii ki yapabilirsiniz - sadece köleyi farklı bir /etc/my.cnf ile çalıştırmanız gerekiyor

Hatta nice / renice ve görev setini (bir Linux sunucusu olduğu varsayılarak) kullanarak master ve slave üzerindeki programlama önceliğini / CPU benzeşimini değiştirmek için bir şeyler yapabilirsiniz.

ancak çoğaltma aşırı net gerçekleşir ve ping ~ 220ms olur

Gecikme hemen hemen önemsizdir - önemli olan bant genişliğidir - ve veritabanı bant genişliği (oturum verilerini çoğaltmadığınız varsayılırsa) HTTP bant genişliğinden daha az büyüklükteki birkaç sıradır.

Hiçbir kesinti ile [veritabanının tutarlı bir yedek oluşturmak] (tercihen her 4 saat) gerekir

Ancak tartıştığınız stratejiler, o zamanki gibi bir şeyde iyileşmeye izin vermiyor.

En ucuz seçeneğin aynı makinede bir köle olacağını düşünüyorum - ve yeniden yapılandırabileceğinizin ötesinde performansı olumsuz etkiliyorsa, mevcut barındırma paketini yükseltin.

Geçerli sunucuda bağlantısı kesilmiş bir slave: enable bin günlüklerini çalıştırmayı da düşünebilirsiniz. Bir yedek alın, yedeklemeyi yerel bir makineye geri yükleyin, sonra çöp kutusu günlüklerini döndürülürken kopyalayın ve yerel DBMS'de ileri doğru yuvarlayın .


Güzel yanıt, bunun için teşekkürler. Ben bakıyorum yeni sunucu aynı makinede bir köle izin vermek için yeterli belleğe sahip olurdu, ama binlogs ileri kopyalanan / fikir gerçekten seviyorum. Tekrar teşekkürler!
Christian

1

Benim önerim:

1 - ikinci hesabınızı / sunucunuzu saklayın ve orijinal hesabınızdaki / sunucunuzdaki bir veritabanına çoğaltma uygulayın.

2 - ikinci hesaba / sunucuya çoğaltmayı durdurun.

3 - birkaç gün boyunca performansı izleyin. En yoğun dönemlerinizi içerecek kadar uzun süre izlediğinizden emin olun.

4 - büyük bir performans sorunu varsa eski kurulumunuza geçmeye hazır olun. İkinci hesabı korumanızın nedeni budur.

5 - orijinal hesabınızda daha fazla kapasite / yükseltme sunucusu satın alın. Bu iki sunucu için ödeme daha ucuz olmalı.

6 - ikinci hesabı iptal edin.

İyi şanslar!

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.