MySQLdump dökümü tetikleyebilir ve prosedürler?


10

Belirtilen bir db'den tüm tetikleyicileri ve prosedürleri kaydedecek bir mysqldump yapmanın herhangi bir yolu var mı?

Bir süre önce mysqldump, bunun tetikleyicilerimi de kurtaracağını okudum , ama öyle görünmüyor. İlgili ikinci sorum, bir tetikleyici varsa bir sql dosyasında nasıl kontrol edebilirim?

Yanıtlar:


10

Normalde, tetikleyicileri amaçladıkları tablolardan ayırmaz. Ben böyle dökümü:

mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql

Bunun gibi rutinlerin ve tetikleyicilerin olup olmadığını kontrol edin:

SELECT COUNT(1) FROM mysql.proc;

SELECT COUNT(1) FROM information_schema.triggers;

SELECT * FROM information_schema.triggers\G

Bunu MySQL Eşgörünümündeki tüm DB'lere yapmak istiyorsanız, bunu yapın:

mysql -u... -p... -A -N -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql')" > /tmp/dblist.txt
for DB in `cat /tmp/dblist.txt`
do
    mysqldump -u... -p... --no-data --no-create-info --routines dbname > ${DB}-routines.sql
    mysqldump -u... -p... --no-data --triggers dbname > ${DB}-schema-triggers.sql
done

Bu şekilde, saklı yordamlar DB için rutin bir dökümde giderken, şema ve tetikleyiciler başka bir dökümde gider.


@dole Rolando'nun tetikleyicilerin / prosedürlerin nasıl atılacağı konusundaki hakkı. Bir sql dosyasında var olup olmadıklarını görmek istiyorsanız, dosyayı açın ve 'CREATE TRIGGER' çağrılarını arayın. * Nix ise,grep 'CREATE TRIGGER'
Derek Downey

@RolandoMySQLDBA, --triggersVarsayılan olarak boşaltılamaz mı ? --no-data --routines --triggersVs arasındaki fark nedir --no-data --routines?
Pacerier

1
@Pacerier Tetikleyicileri istemediğim durumlar vardı ve --skip-triggersbu gibi durumlarda kullanacağım (tetikleyicilere ihtiyaç duymayan köleler kurmak gibi). Seçenekleri atlama olasılığını kendime sürekli hatırlatmak için , varsayılan olsalar bile her zaman mysqldumps ( --routines, --triggers) 'da belirli bayrakları kullanıyorum . Yani, bu sadece kişisel bir tercih. Varsayılan bir ayarın sürümden sürüme varsayılan olarak kalacağına ve hiçbir zaman adhoc durumlarıyla uğraşmayacağına inanıyorsanız, ortaya çıkan mysqldump sizin için doğru olduğu sürece mysqldumps'ı gerektiği gibi ifade edersiniz.
RolandoMySQLDBA

@RolandoMySQLDBA - -A -N ne yapar?
MontyPython

DROP tetikleyici ifadelerinin başına düzenli ifadeler kullandım: Bunu değiştirin: (\ / * \! 50003 CREATE * \ / \ / * \! 50017 DEFINER \ = some_text_here * \ / \ / * \! 50003 TRIGGER (. *?) ) Bununla: DROP TRIGGER / *! 50032 EĞER VARSA * / $2;; \ n 1 $
AlexandruSerban
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.