mysqldump:出现错误:1449:

Posted

技术标签:

【中文标题】mysqldump:出现错误:1449:【英文标题】:mysqldump: Got error: 1449: 【发布时间】:2014-12-22 08:50:33 【问题描述】:

mysqldump: Got error: 1449: The user specified as a definer('root'@'192.200.1.16') 在使用 LOCK TABLES 时不存在

请给出上述错误的解决方案。

【问题讨论】:

MySQL error 1449: The user specified as a definer does not exist 的可能重复项 【参考方案1】:

最新的答案提到使用 --single-transaction 确保当您恢复该备份时,您将再次遇到该错误,因此最好的解决方案是更改定义器,如果用户缺少任何管理员用户的添加定义器目前正在使用。

【讨论】:

【参考方案2】:

最好使用--single-transaction的第一个mysqldump,例如:

mysqldump --single-transaction -u root -p mydb > mydb.sql

如果上面不起作用,请尝试下面的一个。

您必须替换该过程/方法的定义器,然后您才能生成转储而不会出错。

你可以这样做:

UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@192.200.1.16'

第三方编辑

对于 mysql 8.0,表 proc 不再存在。试试

 SELECT * FROM information_schema.routines;

【讨论】:

如果您需要更改的是表而不是过程、视图或方法,该怎么办? 谢谢!有效!另外,如果有人感兴趣,here 是有关--single-transaction 选项的一些文档。 特别是(来自文档):“--single-transaction 选项和--lock-tables 选项是互斥的,因为 LOCK TABLES 会导致任何未决事务被隐式提交。”所以我猜它删除了任何 LOCK该事务的 TABLES 设置,因此不再有任何冲突?反正我就是这么读的..【参考方案3】:

从另一台主机复制所有视图和表格后,我遇到了同样的问题。

在我使用此查询更改数据库中的所有定义器后,它起作用了。

  SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", 
                table_name, 
                " AS ", 
                view_definition, ";") 
    FROM information_schema.views 
    WHERE table_schema='your-database-name';

【讨论】:

【参考方案4】:

我遇到了类似的问题,问题是想要将数据库从一个实例迁移到另一个实例,但转储中还有一些过程引用了其他数据库,所以我标记了这个错误并通过修改过程或未能删除来纠正一些。

【讨论】:

【参考方案5】:

试试这个:

mysqldump -h hostname -u thomas -p -x dbname >  xxx_2015_03_25.sql

【讨论】:

需要提供更多信息来解决查询,只是转储并不能解决问题。 这个答案不支持这个问题。 这个答案离题了

以上是关于mysqldump:出现错误:1449:的主要内容,如果未能解决你的问题,请参考以下文章

Mysqldump 1449 错误解决 mysqldump: Got error: 1449

mysql备份错误

一般错误:1449 用户指定为定义者

mysqldump: Got error: 1449: The user specified as a definer ('user'@'%') does not ex

MySQL错误:The user specified as a definer (XXX@XXX) does not exist (1449错误)最简解决方案

MySQL 错误 1449:指定为定义者的用户不存在