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-transaction
All-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>;