Mysql

mysqldump可以轉儲觸發器和程序嗎?

  • March 4, 2022

有沒有辦法製作一個 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是不夠的。事實證明,我用來轉儲的使用者在數據庫中沒有這樣的權限。

引用自:https://dba.stackexchange.com/questions/6420