mysqldump: Got error: 1449: The user specified as a definer ('dba'@'10.1.1.123') does not exist when using LOCK TABLES
這是從 A dump 倒到 B 資料庫後,要再從 B dump 時出現的錯誤訊息
這原因是通常維護人員跟開發人員所使用的帳號不同,且這個 definer 是在用 MySQl 的 views 或 procedures 所產生的
我們查 A dump 出來的 sql 裡面會有
/*!50013 DEFINER=`dba`@`10.1.1.123` SQL SECURITY DEFINER */
所以要倒到 B 資料庫前,先把 dba@10.1.1.123 取代成 root@localhost 之類的
sed -i 's/DEFINER=`dba`@`10.1.1.123`/DEFINER=`root`@`localhost`/g' A_dump.sql
假如忘記取代,B 資料庫 想要能 dump 出來,就
mysqldump --single-transaction
不過還是有可能出現不可預期的錯誤,所以還是事先 sed 取代
也有可能是權限不夠
或
CREATE USER 'dba'@'10.1.1.123'; or GRANT USAGE ON *.* TO 'dba'@'10.1.1.123'; or GRANT ALL ON *.* TO 'dba'@'10.1.1.123';
留言