首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从MySQL转储中删除定义器子句

从MySQL转储中删除定义器子句
EN

Stack Overflow用户
提问于 2012-02-26 02:28:51
回答 23查看 127.3K关注 0票数 135

我有一个数据库的MySQL转储。在它里面,有定义子句,看起来像,

代码语言:javascript
运行
复制
"DEFINER=`root`@`localhost`" 

也就是说,这些定义器子句位于我的CREATE VIEW和CREATE PROCEDURE语句中。有没有办法从我的转储文件中删除这些定义器子句?

EN

回答 23

Stack Overflow用户

发布于 2014-07-07 22:47:33

您可以使用SED删除

代码语言:javascript
运行
复制
sed -i 's/DEFINER=[^*]*\*/\*/g' mydump.sql

在MacOS中:

代码语言:javascript
运行
复制
sed -i '' 's/DEFINER=[^*]*\*/\*/g' mydump.sql
票数 84
EN

Stack Overflow用户

发布于 2016-03-04 00:05:34

从mysql版本5.7.8开始,您可以将--skip-definer选项与mysqlpump一起使用,例如:

代码语言:javascript
运行
复制
mysqlpump --skip-definer -h localhost -u user -p yourdatabase

请访问http://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html#option_mysqlpump_skip-definer查看更新的mysql手册。

票数 66
EN

Stack Overflow用户

发布于 2014-05-13 05:48:44

我使用这些想法从我自己的mysqldump输出中去掉了DEFINER子句,但我采用了一种更简单的方法:

只需删除代码和定义器之前的!,其余的注释就会变成常规注释。

示例:

代码语言:javascript
运行
复制
/*!50017 DEFINER=`user`@`111.22.33.44`*/

会变得无能为力,就像这样做..

代码语言:javascript
运行
复制
/* 50017 DEFINER=`user`@`111.22.33.44`*/

不过,最简单的regexp是删除!以及这些数字

代码语言:javascript
运行
复制
mysqldump | /usr/bin/perl -pe 's/\!\d+ DEFINER/DEFINER/' > dumpfile.sql

删除!#### DEFINER并用DEFINER取而代之...你也可以删除定义器,这真的无关紧要-一旦"!“已经消失了

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9446783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档