一、剛來新公司,因mysql版本陳舊,因此升級版本爲5.6,升級導入數據後應用一直被報錯以下html
二、各類問題排查後,終於找到問題,原來是mysql建立語句中加入 DEFINER 參數mysql
三、瞭解一下sql
【definer和invoker的解釋】函數
建立存儲過程的時候能夠指定 SQL SECURITY屬性,設置爲 DEFINER 或者INVOKER,用來奉告mysql在執行存儲過程的時候,,是以DEFINER用戶的權限來執行,仍是以調用者的權限來執行。htm
默認狀況下,使用DEFINER方式,此時調用存儲過程的用戶必須有存儲過程的EXECUTE權限,而且DEFINER指定的用戶必須是在mysql.user表中存在的用戶。blog
DEFINER模式下,默認DEFINER=CURRENT_USER,在存儲過程執行時,mysql會檢查DEFINER定義的用戶'user_name'@'host_name'的權限;內存
INVOKER模式下,在存儲過程執行時,會檢查存儲過程調用者的權限。get
四、解決方式:it
給「@%」添加權限,或者重構函數語句將「@%」刪除便可io
五、另外記錄一點,當主機內存不足以被mysql分配內存時,後出現以下報錯:
InnoDB: mmap(274726912 bytes) failed; errno 12
2019-06-19 11:38:34 13132 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2019-06-19 11:38:34 13132 [ERROR] Plugin 'InnoDB' init function returned error.
2019-06-19 11:38:34 13132 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2019-06-19 11:38:34 13132 [ERROR] Unknown/unsupported storage engine: InnoDB
2019-06-19 11:38:34 13132 [ERROR] Aborting
須要將服務其內存調大後才能繼續使用