我正在使用 mysqldump 在特定计算机上的帐户之间复制数据库。一切工作都很好,除非进入定义的 View 。因为转储包括以下行...
/*!50013 DEFINER=`user_a`@`localhost` SQL SECURITY DEFINER */
...当将转储加载到user_b上的mysql时,我们收到一个错误:
ERROR 1227 (42000) at line 657: Access denied; you need the SUPER privilege for this operation
不用说,我对此mysql实例没有 super 权限。有没有办法说服 mysqldump 以用户不可知的方式转储 View ?关于这一点,我在手册中找不到任何内容。我是否必须解析转储文件以替换用户名?还是我错过了什么?
最佳答案
同样的问题。我这样解决了:
mysqldump -uuser1 -ppassword1 database1 > backup.sql
sed '/^\/\*\!50013 DEFINER/d' backup.sql > backup_without_50013.sql
mysql -u user2 -ppassword2 -D database2 < backup_without_50013.sql
有趣的是sed命令,该命令在此处删除以/ *!50013开头的所有行。
海蒂