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
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错误)最简解决方案