將資料庫透過 MySQL 匯入後,若其中包含存儲過程,往往會發現存儲過程無法被應用程式正常呼叫。經過排查,這通常是權限設定問題導致的。
首先,我們可以透過以下指令查看目前資料庫中的存儲過程狀態:
mysql> show function status;

假設應用程式連線資料庫的帳號為 leiming,連線位址為 127.0.0.1。需執行以下兩條 SQL 指令來修正權限:
mysql> update mysql.proc set Definer='leiming@127.0.0.1';
mysql> update mysql.proc set Security_type='INVOKER';
注意: 上述指令會修改所有存儲過程。若僅需修改特定存儲過程,請加上 WHERE 條件限制範圍。
log_bin_trust_function_creators 的處理若匯入時出現以下錯誤:
you *might* want to use the less safe log_bin_trust_function_creators variable
請進入 MySQL 執行:
mysql> SET GLOBAL log_bin_trust_function_creators = 1;
完成後退出並重新匯入存儲過程即可成功。