The user specified as a definer ('root'@'%') does not exist
通常發生於:
DEFINER='root'@'%' 的 View、Stored Procedure、Trigger、Eventroot@% 使用者mysql -u root -p
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'StrongPassword123!';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
# 匯出時排除 DEFINER
mysqldump --skip-definer -u root -p dbname > dump.sql
# 或匯出後批次替換
sed -i "s/DEFINER=\`root\`@\`%\`/DEFINER=\`root\`@\`localhost\`/g" dump.sql
# 或移除 DEFINER 子句
sed -i 's/DEFINER=[^ ]* //g' dump.sql
mysql -u root -p --skip-definer dbname < dump.sql
MySQL 物件(View/Procedure/Trigger/Event)建立時會綁定 DEFINER(預設為建立者 CURRENT_USER)。執行時檢查 DEFINER 是否存在於 mysql.user,不存在則報錯。常見於:
mysqldump 未加 --skip-definerSELECT USER, HOST FROM mysql.user; 對比源目標使用者--skip-definer --routines --triggers --eventsmysql.proc、information_schema.VIEWS 中的 DEFINER 合規性