Bir mysql veritabanını düşük öncelikli olarak nasıl yedeklerim?


15

Bir veritabanını yedeklemek istiyorum, ancak gün boyunca sunucuda yük var. Yedeklemenin aynı sunucuda çalışan apache ve diğer veritabanlarını etkilememesi çok önemlidir.

Mysqldump komutunu kullanmak mümkün olmalı , ancak komutu düşük öncelikte çalıştırın.

Bunu nasıl yapabilirim?

Güncelleme: Görünüşe göre mysqldump ile nice kullanmak işe yaramaz çünkü mysqldump yeni bir süreç ortaya çıkarır.


mysqlhotcopy'ye baktın mı?

@ fsb mysqlhotcopy OP'nin istediklerini nasıl destekler?
Tomas

Yanıtlar:


8

Sunucunuzun yazma yükü ile başa çıkabilecek bir yedek sunucunuz varsa, o sunucuya çoğaltma ayarlayabilir ve sonra bağımlı sunucudan yedekleme yapabilirsiniz. Bu ayrıca yedekleme yaparken ve veritabanı sunucusunu etkilemeden tüm veritabanlarında veya tek bir veritabanındaki tüm tablolarda verilerinizin tutarlı bir anlık görüntüsünü alırken çoğaltmayı durdurabilme avantajına sahiptir. Bu, kaynaklarınız varsa her zaman MySQL'i yedeklemek için tavsiye ettiğim kurulumdur.

Güzel bir bonus olarak, yavaş çalışan uzun sorgular için kullanabileceğiniz salt okunur bir köle var.


Ne yazık ki bu seçenek en çok iş gibi görünüyor, ancak sanırım ana sunucu üzerinde minimum etki istiyorsanız tek gerçek seçenek.
andyuk

2
İşlemleri etkilemek istemiyorsanız, düzgün bir şekilde yedeklenmiş yedek almanın neredeyse tek yolu budur. Yavaşlama mysqldumpuzun bir kilidin tutulmasına veya tabloların senkronize olmamasına neden olacağından.
Dan Carley

15

Andy, şimdiye kadar bir çözüm bulmak için çok zamanın olduğunu tahmin ediyorum. Kısa bir süre önce, tsheets'te benim için harika çalışan bir çözüm buldum ve paylaşacağımı düşündüm.

cstream , UNIX dd gibi, genellikle komut satırı ile oluşturulmuş borularda kullanılan genel amaçlı bir akış işleme aracıdır. Cstream'i bizim için kullanışlı kılan şey, tüm girdiler için maksimum bant genişliğini belirtmenize izin vermesidir. Bu, mysqldump komutunuzun disk IO'sunu aşağıdaki gibi basit bir komutla sınırlayabileceğiniz anlamına gelir:

mysqldump --single-transaction --quick -u <USER> -p<PASS> <Database> | cstream -t 1000000 > backup.sql

Tüm InnoDB tablolarını kullanan bir veritabanını yedeklediğinizi varsayarsak, yukarıdaki komut güvenlidir (diğer sorguları etkilemez) ve disk okumalarını saniyede sadece bir megabayt ile sınırlarken mysqldump'ınızı yapar. Bant genişliğini -t parametresiyle, ortamınızın müşterinizin deneyimini etkilemeden yedeklemeyi yapmasına izin verecek herhangi bir değere ayarlayın.


Sadece test ettim ve bir cazibe gibi çalışıyorum! Brandon'ı paylaştığın için teşekkürler!
sucotronic

4

FWIW bunu pv ile de yapabilmelisiniz ( http://linux.die.net/man/1/pv )

mysqldump - tek işlem --quick -u -p | pv --rate limit 1m> hedef (veya | nc veya | tar cfj backup.bz2 -)

Bununla ilgili güzel bir şey, ilerlemeyi izlemek için çeşitli seçenekler ve seçenekleri zaten çalışan bir işleme geçirmenizi sağlayan -R seçeneğidir; aktarım hızını değiştirmek için --rate-limit.


1

Eğer innodb kullanmak deneyebileceğiniz xtrabackup --throttle ile seçeneği .

İyonice bakabilir ve onunla mysqldump çalıştırabilirsiniz.

veya bin günlüklerini güvenli bir konuma her 1-2 saatte bir kopyalarken, mysql'de ikili günlük kaydını etkinleştirmek ve haftada bir kez tam dökümü çalıştırmak isteyebilirsiniz. ve .. sadece yedekleme amaçlı salt okunur slave de bir seçenektir.


0

Linux'ta veya başka bir * nix varyantında çalıştırıyorsanız, aşağıdakileri yapabilirsiniz:

nice -n ## Instagram Hesabındaki Resim ve Videoları mysqldump

Bu, ona daha düşük bir programlama önceliği verecektir. Zamanlama önceliğinin -20 (en yüksek öncelik) ile 19 (en düşük öncelik) aralığı, -n argümanı atlanırsa nice için varsayılan değer 10'dur.


0

cron.d / mysql_dump:

17 22 * * * backup touch /home/backup/all_databases.sql && chmod 600 /home/backup \ 
/all_databases.sql && ionice -n 7 /usr/bin/mysqldump -u root -ppassword --opt --all- \
databases > /home/backup/all_databases.sql && nice -n 20 bzip2 -f \
/home/backupall_databases.sql

I / O önceliği için iyonice ve cpu önceliği için güzel.

Vmstat 5'i çalıştırın, WA yazan sütunu kontrol edin. Yüksek değer CPU'nun G / Ç'yi beklediği anlamına gelir. İyonice kullanın, eğer sadece CPU yükü varsa, güzel kullanın.

Güncelleme yanıtı:

Doğru gözüküyor. Bu hoş olmayan mysql çağırır. Bunun için renice kullanabilirsiniz ve çalıştırıldıktan sonra güzel bir değer ayarlayabilirsiniz sanırım.

Gerçi sizin için yararlı bir komut dosyası yapmak için atm dökümü için yeterince büyük bir veritabanı yok.

Çoğaltma, bağlantınızın önerdiği gibi, gitmenin bir yoludur. Diğer konakta çoğaltın, durdurun ve boşaltın.


0

MySQL verilerinizi bir LV üzerine koyun ve LV'un anlık görüntüsünü alan ve MySQL veri dosyalarını tartan bir güzel mylvmbackup işi kullanın . Bu şekilde tabloları kilitlemez ve uygulamalarınız üzerindeki etkiyi yalnızca IO yüküne en aza indirirsiniz.


0

Her zaman yoğun saatlerde çalıştırmamaya çalışabilirsiniz. Kullandığınız öncelik ne olursa olsun, döküm tüm tablolarınız için bir kilit gerektirecektir.


Bu doğru değil: tablolar InnoDB ise, okumak için üzerlerine kilit yerleştirilmez.
dr01
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.