2011-02-04 27 views
5

Arka uç olarak mysql kullanan bir java uygulamam var, her gece mysqldump kullanarak mysql'in bir yedeğini alıyoruz ve uygulama bu süre boyunca (app 20 dk) çalışmayı durdurur.mysql - mysqldump nasıl çalışır?

Komutu almak için kullanılan komut.

$MYSQLDUMP -h $HOST --user=$USER --password=$PASS $database > \ 
$BACKDIR/$SERVER-mysqlbackup-$database-$DATE.sql 
gzip -f -9 $BACKDIR/$SERVER-mysqlbackup-$database-$DATE.sql 

Bu normal mi yoksa DB'nin bu süre içinde durmasına neden olan bir sorun mu yapıyorum?

sayesinde K

cevap

1

mysqldump tablolar bir okuma kilidi almak ve tutarlı bir yedekleme sağlamak amacıyla yedekleme süresi için tutmak zorundadır. Bununla birlikte, bir okuma kilidi sonraki okumaları duraklatabilir, eğer arasında bir yazım oluşursa (yani, read -> write -> read): ilk okuma kilidi, ikinci okuma kilidini bloke eden yazma kilidini bloke eder.

Bu, kısmen tablonuzun türüne bağlıdır. MyISAM kullanıyorsanız, tüm tabla için kilitler uygulanır ve bu nedenle tablonun tamamı kilitlenir. InnoDB'deki kilitlerin farklı çalıştığına ve bunun tüm masayı kilitlemeyeceğine inanıyorum.

0

--skip-lock-tables numaralı telefonu belirtebilirsiniz, ancak bu, yedekledikçe verilerin değiştirilmesini sağlayabilir. Bu, verilerinizin tutarsız olduğu ve her türlü hatayı attığı anlamına gelebilir. En azýnýn kullanýcýlarýn kullanýcýlarýnýn yedeðini almak için en iyisi.

1
If tables are stored in the InnoDB storage engine, mysqldump provides a 
    way of making an online backup of these (see command below). 

    shell> mysqldump --all-databases --single-transaction > all_databases.sql 

Bu ... özellikle --single-işlem seçeneği yardımcı olabilir değil, tüm veritabanlarının bir ...