Optimum mysqldump ayarları nelerdir? [kapalı]


14

Biraz arama yaptıktan sonra aşağıdaki ayarlarla karşılaştım:

    mysqldump\
    --host=localhost\
    --port=3306\
    --databases ****\
    --user=****\
    --password=****\
    --default-character-set=utf8\
    --add-drop-database\
    --add-drop-table\
    --add-locks\
    --complete-insert\
    --extended-insert\
    --lock-all-tables\
    --create-options\
    --disable-keys\
    --quick\
    --order-by-primary\
    --set-charset\
    --tz-utc\
    > dump/test.sql

Şimdiye kadar iyi ama parametreleri ve yürütme ile ilgili bazı sorularım var.

İlk endişemle ilgili olarak, hepsinin gerekli olduğundan emin olmak ve birlikte kullanıldığında herhangi bir çatışmaya neden olmamak istiyorum. Sonuçta, milyonlarca kayıt içeren, tablolar, veritabanları oluşturan ve veri ekleyen çok sağlam ve tutarlı bir döküm dosyası yapmak istiyorum. İyi olan şey, veritabanını bir süre için kullanılabilir hale getirmem benim için bir sorun değil. Tek amacım sağlam ve tutarlı bir döküm dosyası oluşturmak.

İkinci konserimle ilgili olarak, komutun yanlış gittiğinde nasıl bilgilendirileceğini bilmek istiyorum ve eğer öyleyse bir istisna atın.

Herhangi bir fikir?

DÜZENLE

Bu, RolandoMySQLDBA'nın geri bildirimlerine dayanan güncellenmiş mysqldump komutum.

mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql

Her bir argümanı ve faydalarını okuyun ve hangisinin size uygun olacağını seçin. Ayrıca arıza durumlarını tetiklemek için komut dosyası tanımak.
Mannoj

Güzel. Ama bu gerçekten soruma cevap vermiyor. Örneğin, hangisini her zaman kullanıyorsunuz?
user706838

Cehaletimi affet, bu soru bir kitap veya web sitesi önermekle ilgili değil. Bence bu fikre dayalı bir soru tipi olmamalı. Bu, bazı cevapların uzmanlığa bağlı olarak kesinlikle daha kaliteli olacağı ve testlerle destekleneceği söylenmiştir. Benim düşünceme göre, soru iyi tanımlanmış bir hedefle mükemmel bir şekilde ifade edilmiştir.
user10089632

Yanıtlar:


30

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_Proceduressı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_Triggerssı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

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 .


Hakkında - add-drop-database: Bu, veritabanınızda dökümünüzde olmayan başka rasgele tabloların bulunmadığından da emin değil mi? Birisi veritabanınızda elle rastgele bir test tablosu oluşturduysa, bu seçenek olmadan dökümünden yeniden yükledikten sonra da var olacaktır. Yani, bunu isteyip istemediğinize bağlıdır. Sağ?
jschultz410

Ne olmuş --add-drop-trigger?
Lonix
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.