如何使用mysqldump在帐户之间复制视图?

时间:2008-09-30 18:29:17

标签: mysql mysqldump

我正在使用 mysqldump 在特定计算机上的帐户之间复制数据库。一切都很有效,除非我们进入定义的视图。因为转储包含如下所示的行...

/*!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实例没有超级特权。有没有办法说服 mysqldump 以用户无关的方式转储视图?关于这一点,我在手册中找不到任何内容。我是否必须实际解析dumpfile以替换用户名?或者我错过了什么?

4 个答案:

答案 0 :(得分:27)

同样的问题。我这样解决了:

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开头的所有行。

Heidy

答案 1 :(得分:12)

您需要处理备份文件并更改DEFINER:

DEFINER = user_a {@ {1}}

我想将其更改为:

DEFINER = CURRENT_USER

然后它会自动与加载它的帐户相关联。

答案 2 :(得分:2)

SQL SECURITY子句​​确定在检查视图的访问权限时要使用的MySQL帐户(正如您可能已经想到的那样)。

创建视图时,您可以为该视图定义几个安全选项。您可以阅读更多here,但基本上默认情况下,访问仅限于视图的“定义者”,即创建它的用户。

答案 3 :(得分:0)

使用选项mysqldump

运行"--skip-triggers"