当前位置:  开发笔记 > 后端 > 正文

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

如何解决《如何使用mysqldump在帐户之间复制视图?》经验,为你挑选了2个好方法。

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



1> 小智..:

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

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


谢谢,我实际上最终做了同样的事情,除了使用grep -v而不是sed,但结果是一样的.:)

2> 小智..:

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

DEFINER = user_a@localhost

我想把它改成:

DEFINER = CURRENT_USER

然后它将自动与加载它的帐户相关联.


谢谢你的提示!我用(我需要转义`):sed -ri s/DEFINER = \`[^ \`] + \`@ \`%\`/ DEFINER = CURRENT_USER/g file.sql
这个!来自@brunoqc的一点点'sed`魔术就是完美的
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有