InnoDB tabloları MyISAM ile karıştırıldığında mysqldump sırasında kilitlendi mi?


9

MySQL sunucularım için bir yedekleme çözümü arıyorum ve mümkün olduğunca daha az kesinti gerekir. Şunlara sahibim:

  • MySQL sunucuları
  • kopyalanmıyorlar
  • her sunucu kendi başına duruyor

Bu sayı büyüyebilir, bu nedenle bir master / slave çoğaltması ayarlamak iyi bir fikir olmaz.

Gördüğüm gibi en kolay yedekleme yolu mysqldump "automysqlbackup" gibi bir yazılım ile kullanmak olacaktır. En önemli verilerim InnoDB kullanıyor. InnoDB tablolarım oldukça ağır.

Soru: Sunucudaki tüm veritabanlarına mysqldump yaparsam, Innodb tablolarımı kilitler mi?

Yanıtlar:


7

InnoDB ve MyISAM'lı mysqldumps birlikte dışlanır. İşte nedeni:

Eğer bir mysqldump devam ederken mysql giriş yapabilirsiniz, böyle bir şey göreceksiniz:

SELECT /* SQL_NO_CACHE */ * FROM tblname

Varsayılan olarak, mysqldump aşağıdakileri yapar:

  • Her veritabanı alfabetik sıraya göre dökülür
  • Veritabanı başına dökülen her tablo alfabetik sırayla dökülür (depolama motorundan bağımsız olarak)

Başka veritabanı etkinliği olmayan bir MySQL Eşgörünümü için bu iyi olmalıdır. InnoDB tabloları ve MyISAM tabloları birbirini etkilemez.

--single-transactionAll-InnoDB MySQL Eşgörünümüne karşı kullanmak bir denetim noktası oluşturur ve tüm tabloları aynı anda boşaltır. Bir MyISAM tablosu ile karşılaşıldığında, tüm bahisler kapanır. MyISAM'den sonra tüm InnoDB tablolarının farklı bir zaman noktasından dökülmesine neden olabilir.

InnoDB ve MyISAM karışımı için tutarlı bir zamanında nokta dökümü için seçenekleriniz vardır

SEÇENEK 1

Başka hiç kimsenin TCP / IP ve sonra mysqldump ile giriş yapmaması için mysql'yi yeniden başlatın

service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart 

SEÇENEK 2

Tüm MyISAM tabloları yalnızca okuma amaçlıysa, --single-transaction kullanarak sadece mysqldump

SEÇENEK # 3

Herhangi bir MyISAM tablosu yazılıyorsa, - tek işlem yeterli değildir

Aşağıdakileri yapmanız gerekecek:

mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql

MySQLdump yapıldıktan hemen sonra MySQL'e giriş yapın ve yapın show processlist;. Sorguyu arayın SELECT SLEEP(86400), işlem kimliğini bulun ve çalıştırınKILL <procidnumn>;


5

mysqldump --single-transactiontabloları kilitlemez ancak MyISAM tablolarının bu seçenekle tutarlı dökümlere sahip olması garanti edilmez. Kullanmak daha iyidir mydumper, mydumperMyISAM tablolarını kilitler ve InnoDB'yi kilitlemez, böylece dökümü tutarlı olur.


Vay, bu harika araç için teşekkürler! Mydumper ile günlük, haftalık, aylık yedeklemeleri otomatikleştirebilecek bir araca aşina mısınız? Sadece mydumper ile "automysqlbackup" gibi bir şey? Teşekkürler.
tounano

0

mysqldump dökümü sırasında tabloyu kilitler. LVM anlık görüntüleri veya Xtrabackup kullanın .

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.