kfmfe04 Asked: 2011-12-16 18:56:03 +0800 CST2011-12-16 18:56:03 +0800 CST 2011-12-16 18:56:03 +0800 CST 如何在 Mysql 中更改 VIEW 的 DEFINER? 772 当我运行 mysqldump 时,我得到一个错误: mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES 这是有道理的,因为foobar它是不再存在的遗留机器。 如何将所有表的定义器更改为'root'@'localhost'? mysql mysqldump 4 个回答 Voted Best Answer Abdul Manaf 2011-12-16T22:55:39+08:002011-12-16T22:55:39+08:00 我认为您尝试转储的数据库包含用户在以 root@'foobar' 身份登录时定义的过程/方法。 现在的解决方案是您必须替换该程序/方法的定义器 然后您可以生成没有错误的转储。 你可以这样做.. UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@foobar' 请小心,因为这将更改所有数据库的所有定义器。 试试看....! 2012 年 2 月 9 日更新 正如我看到@gbn 给出的链接,这是@Rolando 给出的答案,也可能是这种情况。请访问链接 @RolandoMySQLDBA 编辑 2011-12-16 11:20 EDT 虽然有风险,但这个答案很好。澄清一下:您可以像这样在查询中指定数据库: UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@foobar' AND db='whateverdbyouwant'; rod 2012-11-22T13:10:01+08:002012-11-22T13:10:01+08:00 更容易使用的--single-transaction开关: mysqldump --single-transaction -u username -p db > db.sql ColinM 2012-05-10T17:49:36+08:002012-05-10T17:49:36+08:00 最快的解决方案就是重新创建定义器,使其确实存在,只要它不会与现有用户产生任何冲突。 CREATE USER 'root'@'foobar'; x-yuri 2014-04-12T12:44:15+08:002014-04-12T12:44:15+08:00 导出数据库的所有视图<DB>: mysql -BNe "SELECT TABLE_NAME FROM TABLES WHERE TABLE_SCHEMA = '<DB>' AND TABLE_TYPE = 'VIEW'" \ information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql 或者: mysql -BNe "SELECT TABLE_NAME FROM VIEWS WHERE TABLE_SCHEMA = '<DB>'" \ information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql 编辑views.sql并重新创建它们: cat views.sql | mysql <DB> 如有必要,请指定-u和切换。-p
我认为您尝试转储的数据库包含用户在以 root@'foobar' 身份登录时定义的过程/方法。
现在的解决方案是您必须替换该程序/方法的定义器
然后您可以生成没有错误的转储。
你可以这样做..
请小心,因为这将更改所有数据库的所有定义器。
试试看....!
2012 年 2 月 9 日更新
正如我看到@gbn 给出的链接,这是@Rolando 给出的答案,也可能是这种情况。请访问链接
@RolandoMySQLDBA 编辑 2011-12-16 11:20 EDT
虽然有风险,但这个答案很好。澄清一下:您可以像这样在查询中指定数据库:
更容易使用的
--single-transaction
开关:最快的解决方案就是重新创建定义器,使其确实存在,只要它不会与现有用户产生任何冲突。
CREATE USER 'root'@'foobar';
导出数据库的所有视图
<DB>
:或者:
编辑
views.sql
并重新创建它们:如有必要,请指定
-u
和切换。-p