我试图恢复具有 DEFINER= test
@的数据库转储%
。
备份文件为 50GB。
操作系统 - CentOS 7.5
在恢复这个时,我得到了以下错误。
ERROR 1227 (42000) at line 30908: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
第 30908 行是,
CREATE DEFINER=`test`@`%` PROCEDURE `myprod`(IN id INT)
所以我尝试使用 perl 删除定义器。
perl -p -i.bak -e "s/DEFINER=\`\w.*\`@\`\d[0-3].*[0-3]\`//g" my_dump_file.sql
它已执行,但在那之后,我也遇到了同样的问题,并且文件中没有更改。
然后我试了,
sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' < my_dump_file.sql > my_dump_file.new
这也被执行,并试图恢复 my_dump_file.new 但在同一行上仍然存在相同的问题。
最后我尝试在 MySQL 上创建一个用户。
create user `test`@`%` identified by 'test';
grant all on *.* to `test`@`%`;
flush privileges;
同样,我遇到了同样的问题。
谁能帮我解决这个问题?
笔记:
-r
: 更好的语法\s
: 任何空格(例如制表符)\S
: 非空格(我在 Ubuntu 上测试过,而不是 CentOS。)