Mysql
通過 information_schema 更新 mysql 觸發器——訪問被拒絕?
對於 MySQL(實際上是 MariaDB)中的某些觸發器,我有一些錯誤的“定義器”。我認為糾正它們的最簡單方法是以下版本:
use information_schema; update triggers set definer=current_user() where trigger_schema='foobar';
它產生:
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'information_schema'
在同一個會話中,我可以使用“drop trigger”和“create trigger”來刪除和重新創建觸發器,所以我不理解權限問題。我的使用者是否需要一些它沒有的特權?
您正在做的事情是不可能的,因為 INFORMATION_SCHEMA 數據庫是由記憶體中只讀臨時表組成的數據庫(請參閱我的文章如何在 MySQL 中實現 INFORMATION_SCHEMA?)
您將不得不刪除觸發器並重新創建它們
我之前寫過一個文章(
Oct 02, 2011
:mysqldump可以轉儲觸發器和程序嗎?)這是您可以對
foo
數據庫中的所有觸發器執行的操作STEP 01 : mysqldump 觸發器
MYSQL_USER=root MYSQL_PASS=rootpassword MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}" mysqldump -${MYSQL_CONN} -d -t --skip-routines --triggers foo > foo_make_triggers.sql
為了澄清
STEP 02 : 創建一個腳本來刪除所有觸發器
MYSQL_USER=root MYSQL_PASS=rootpassword MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}" SQL="SELECT CONCAT('DROP TRIGGER ',trigger_name,';')" SQL="${SQL} FROM information_schema.triggers" SQL="${SQL} WHERE trigger_schema = 'foo'" mysql ${MYSQL_CONN} -ANe"${SQL}" > foo_drop_triggers.sql
STEP 03 : 驗證每個文件的內容
vi -R foo_drop_triggers.sql vi -R foo_make_triggers.sql
STEP 04 : 編輯所有
foo_make_triggers.sql
你知道的定義器步驟 05:登錄 mysql 並執行它
use foo source foo_drop_triggers.sql source foo_make_triggers.sql
請在登台伺服器上進行測試
試一試 !!!