mysqldump:收到错误:1449:使用LOCK TABLES时,指定为定义者的用户('root'@'192.200.1.16')不存在
请为上述错误提供解决方案。
答案 0 :(得分:46)
最好将第一个mysqldump与--single-transaction
一起使用,例如:
mysqldump --single-transaction -u root -p mydb > mydb.sql
如果上面没有工作,请尝试下面一个。
您必须替换该过程/方法的定义器,然后您可以无错误地生成转储。
您可以这样做:
UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@192.200.1.16'
答案 1 :(得分:0)
我有类似的问题,问题是想要将数据库从一个实例迁移到另一个实例但在转储中也是引用其他数据库的过程,因此我标记了该错误并通过修改过程或未能删除来纠正一些。
答案 2 :(得分:0)
当我从其他主机复制所有视图和表格时,我遇到了同样的问题
最后我使用此查询来更改数据库中的所有定义器
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ",view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
答案 3 :(得分:0)
最新的答案提到使用 --single-transaction 确保当您恢复备份时,您将再次面临该错误,因此最好的解决方案是更改定义器,如果用户缺少为任何管理员用户添加定义器目前正在使用。
答案 4 :(得分:-4)
试试这个:
mysqldump -h hostname -u thomas -p -x dbname > xxx_2015_03_25.sql