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';

 

ref : A Workaround for mysqldump Error 1449

最後修改日期: 2014 年 07 月 09 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。