我正在使用 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开头的所有行。

海蒂

09-25 21:35