Bu şok edici bulacaksınız, ancak sadece bir büyük seçeneğe ihtiyacınız var: --opt
Nedir --opt ?
Varsayılan olarak etkin Bu seçenek, birleşimi için kısaltmadır --add bırak-tabloya --add kilitleri --create-seçenekleri --disable-tuşları -insert --extended --lock masaları --Hızlı - set-karakter . Hızlı bir döküm işlemi sağlar ve bir MySQL sunucusuna hızlı bir şekilde yeniden yüklenebilen bir döküm dosyası üretir.
- -opt seçeneği varsayılan olarak etkinleştirildiğinden , yalnızca bunun tersini belirtirsiniz, --skip-opt, birkaç varsayılan ayarı kapatmak için kullanılır. --Opt tarafından etkilenen seçeneklerin bir alt kümesini seçici olarak etkinleştirme veya devre dışı bırakma hakkında bilgi için mysqldump seçenek gruplarının açıklamasına bakın.
Yana --opt zaten etkin, Belirtmek gerek yapmak --opt . Bununla birlikte, dahil olmayan bazı gerekli seçeneklere ihtiyacınız olabilir.
Bu sorguyu veritabanınızda çalıştırın
SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;
Tüm InnoDB tablolarınız varsa, --single-transaction belirtmeniz gerekir . Bu, --lock tablolarını otomatik olarak devre dışı bırakır ve tüm tabloları aynı anda boşaltmanıza ve yeni yazma işlemlerinin aynı anda gelmesine izin verir.
Bir veya daha fazla MyISAM tablonuz varsa --lock-all-tables belirtmeniz gerekir . Bu, --lock-tables otomatik olarak devre dışı bırakılacak , --single-hareketi devre dışı bırakacak , tüm veritabanlarında tüm tabloları kilitleyecek ve daha sonra döküm oluşturacak. InnoDB tablolarına yazma işlemleri yine de gerçekleşebilir, ancak kilitler serbest bırakılıncaya kadar sıraya alınırlar. Herhangi bir MyISAM tablosuna yazma girişiminde bulunan tüm DB Bağlantıları, tüm kilitler serbest bırakılıncaya kadar askıya alınır.
Bu sorguyu çalıştır: SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
Eğer Number_Of_Stored_Procedures
sıfırdan büyük, kullanım --routines .
Bu sorguyu çalıştır: SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Eğer Number_Of_Triggers
sıfırdan büyük, kullanım --triggers .
Ikaz : Do Not Kullanımı Lütfen --order-by-birincil tüm veritabanlarını damping için potansiyel btree endeksleri yerine yeniden yüklemede yamuk duran yapabilir çünkü. --order-by-Primary , yalnızca bir tamsayı birincil anahtarına sahip olduğunu ve uygulamanızdan çok sayıda aralık taraması yapacağınızı bildiğiniz tek bir tabloyu boşaltırken kullanılmalıdır.
Daha yaratıcı mysqldump yedekleme türlerine ihtiyacınız varsa, eski yazıma bakın Büyük bir veritabanının mysqldump'ını nasıl optimize edebilirim? .
Lütfen mysqldump için tüm seçenekleri okuyun .
GÜNCELLEME 2014-12-29 09:44 EST
My mysqldump komutumu güncelledim (lütfen düzenlememe bakın). Yine de son bir sorum var. Sizce aşağıdaki argümanların tümünü kullanmaya değer mi? - add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc
Yorumunuza ve en son düzenlemenize bakalım, bu seçeneklerin her birine bakalım ve bunlardan herhangi birine ihtiyacınız olup olmadığına bakalım
- --opt : Varsayılan olarak etkinleştirildiği için belirtmenize gerek olmadığını söyledim.
- --delayed-insert : Bütün bir InnoDB veritabanı ile bu durumdan uzak duruyorum . Aslında, bu dönemden uzak kalmak !!! . 1) INSERT DELAYED'in veri kaybedebilmesi mümkün olduğundan, 2) MySQL Çoğaltma köleleri için INSERT'e dönüştürülür, 3) MySQL 5.6'da tetikleyicilerle kullanımıyla ilgili açık bir hata raporu vardır ve bir hata olarak kabul edilmez , 4 ) MySQL 5.6'da kullanımdan kaldırılmıştır ve 5) Morgan Tocker (tanınmış MySQL Guru) 2012'de kullanımdan kaldırılmasını öngörmüştür, bu seçeneğin var olduğunu unutmalısınız. Hiç, hiç (sonsuz) kullanmayın !!!
- --complete-insert : Bunun
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
yerine kullanılır INSERT INTO tblname VALUES ...
. Bu, tablo tanımında çok sayıda sütun ve tabloda çok sayıda satır varsa mysqldump'ı şişirebilir. Kullanma.
- - add -drop-table : --opt bunu sizin için etkinleştirdiğinden, belirtmenize gerek yoktur.
- --add bırak veritabanı : Eğer düşürürseniz bırak-veritabanını --add , sadece yapar
DROP TABLE IF EXISTS
(tarafından eklendi hangi --add bırak-tabloya ) hızlı gitmek. Kullanmamak sadece DROP TABLE IF EXISTS
her tablo için gerçekleşmesine izin verir . Bu nedenle, - add-drop-database kullanmak kişisel bir seçimdir.
- --tz-utc : Verileri yedeklediğiniz sunucuya geri yüklemeyi planlıyorsanız --tz-utc'ye ihtiyacınız yoktur . Verileri farklı bir saat dilimindeki başka bir veri merkezine geri yüklerseniz ve ...
- Eğer yedeklediğiniz zaman dilimini aynı tutmak istiyorsanız --tz-utc'ye ihtiyacınız yoktur .
- verilerin yeni bir veri merkezinin saat dilimini kullanmasını istiyorsanız --tz-utc gerekir .
- ÖRNEK: New York'ta bir veritabanını yedeklediğinizi varsayalım. Bu EST. Seattle'da başka bir veri merkeziniz varsa, bu PST olacaktır. New York Backup'ın Seattle'da geri yüklenmesini ve veritabanındaki zaman damgalarının hala New York'u temsil etmesini istiyorsanız, --tz-utc kullanmak istemezsiniz .
- --default karakterlik-kümesi
En son düzenlemenizi ayarladığınızda, özellikle ihtiyacınız olan şey budur
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
Yine, mysqldump için tüm seçenekleri okudum diyorum .