Mysql
mysqldump可以轉儲觸發器和程序嗎?
有沒有辦法製作一個 mysqldump 來保存指定數據庫中的所有觸發器和過程?
前段時間我讀到這
mysqldump
也會保存我的觸發器,但它看起來不像。我的第二個相關問題是如果存在觸發器,我如何簽入 sql 文件?
我通常不會將觸發器與它們打算用於的表分開。我像這樣轉儲:
mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql
檢查是否存在這樣的常式和触發器:
SELECT COUNT(1) FROM mysql.proc; SELECT COUNT(1) FROM information_schema.triggers; SELECT * FROM information_schema.triggers\G
如果要對 MySQL 實例中的所有數據庫完成此操作,請執行以下操作:
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
這樣,儲存過程進入數據庫的常式轉儲,而模式和触發器進入另一個轉儲。
在我的情況下,添加
--triggers
是不夠的。事實證明,我用來轉儲的使用者在數據庫中沒有這樣的權限。