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

Posted MartinDing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysqldump 1449 错误解决 mysqldump: Got error: 1449相关的知识,希望对你有一定的参考价值。

备份数据库

$ mysqldump -uroot -p db > backup/db.sql

上面的terminal 执行

出现了下面的错误

mysqldump: Got error: 1449: The user specified as a definer (\'someuser\'@\'%\') does not exist when using LOCK TABLES

 

 

问题解决:

 

原因:

 

主要原因是当时创建 view procedure 或者trigger使用的user 已经被删除了 这个问题最常见的是数据库迁移之后

我的问题是我db里面一个view 的创建者没有了

可视化查看 information_schema.VIEWS 表格中 查看Deafiner 一栏

mysql information_scheme 表中deafiner

没修改之前是另外一个 deafiner

 

解决方法:

 

1. 修改definer 下面是生成修改

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

 

修改  `youruser`@`host` 变成你的  \'your-database-name\'  变成你的db

就会生成一个alter 语句 可视化编辑也可以

修改成比如说 root@localhost 或者 任何一个用户 (当然你要考虑到这个view 要拥有什么权限,你备份的时候使用的是super 权限 可以不用管那么多,你可以直接备份下来,但是要使用 这个view 就要考虑权限 了,我直接修改成root@localhost 了)

如果是一个procedure 修改 deafiner

 

UPDATE `mysql`.`proc` p SET  = \'user@%\' WHERE definer=\'root@%\'

 

具体的也可以先查看 proc 表 然后再修改

 

2. 增加一个definer

错误: The user specified as a definer (\'root\'@\'%\') does not exist
执行:
GRANT ALL ON *.* TO \'someuser\'@\'%\' IDENTIFIED BY \'complex-password\';
FLUSH PRIVILEGES;

上面有两处需要修改成你自己的 一个 \'someuser\'@\'%\' 还有一处 \'complex-password\'  改成你的密码

 

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

MysqlDump 出现错误:('mysql.infoschema'@'localhost')不存在(1449)

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

mysql备份错误

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

MySQ备份常见问题

如何在没有密码提示的情况下执行 mysqldump?