【发布时间】:2014-12-22 08:50:33
【问题描述】:
mysqldump: Got error: 1449: The user specified as a definer('root'@'192.200.1.16') 在使用 LOCK TABLES 时不存在
请给出上述错误的解决方案。
【问题讨论】:
mysqldump: Got error: 1449: The user specified as a definer('root'@'192.200.1.16') 在使用 LOCK TABLES 时不存在
请给出上述错误的解决方案。
【问题讨论】:
最新的答案提到使用 --single-transaction 确保当您恢复该备份时,您将再次遇到该错误,因此最好的解决方案是更改定义器,如果用户缺少任何管理员用户的添加定义器目前正在使用。
【讨论】:
最好使用--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;
【讨论】:
--single-transaction 选项的一些文档。
--single-transaction 选项和--lock-tables 选项是互斥的,因为 LOCK TABLES 会导致任何未决事务被隐式提交。”所以我猜它删除了任何 LOCK该事务的 TABLES 设置,因此不再有任何冲突?反正我就是这么读的..
从另一台主机复制所有视图和表格后,我遇到了同样的问题。
在我使用此查询更改数据库中的所有定义器后,它起作用了。
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ",
table_name,
" AS ",
view_definition, ";")
FROM information_schema.views
WHERE table_schema='your-database-name';
【讨论】:
我遇到了类似的问题,问题是想要将数据库从一个实例迁移到另一个实例,但转储中还有一些过程引用了其他数据库,所以我标记了这个错误并通过修改过程或未能删除来纠正一些。
【讨论】:
试试这个:
mysqldump -h hostname -u thomas -p -x dbname > xxx_2015_03_25.sql
【讨论】: