备份数据库
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Monaco; color: #f4f4f4; background-color: rgba(0, 0, 0, 0.75) }
span.s1 { }
$ mysqldump -uroot -p db > backup/db.sql
上面的terminal 执行
出现了下面的错误
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Monaco; color: #f4f4f4; background-color: rgba(0, 0, 0, 0.75) }
span.s1 { }
mysqldump: Got error: 1449: The user specified as a definer (‘someuser‘@‘%‘) does not exist when using LOCK TABLES
问题解决:
原因:
主要原因是当时创建 view procedure 或者trigger使用的user 已经被删除了 这个问题最常见的是数据库迁移之后
我的问题是我db里面一个view 的创建者没有了
可以可视化查看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
如果是一个procedure 修改 deafiner
UPDATE `mysql`.`proc` p SET = ‘[email protected]%‘ WHERE definer=‘[email protected]%‘
具体的也可以先查看 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‘ 改成你的密码