我有一个数据库的MySQL转储。在它里面,有定义子句,看起来像,
"DEFINER=`root`@`localhost`"
也就是说,这些定义器子句位于我的CREATE VIEW和CREATE PROCEDURE语句中。有没有办法从我的转储文件中删除这些定义器子句?
发布于 2014-07-07 14:47:33
您可以使用SED删除
sed -i 's/DEFINER=[^*]*\*/\*/g' mydump.sql
在MacOS中:
sed -i '' 's/DEFINER=[^*]*\*/\*/g' mydump.sql
发布于 2016-03-03 16:05:34
从mysql版本5.7.8开始,您可以将--skip-definer
选项与mysqlpump一起使用,例如:
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手册。
发布于 2014-05-12 21:48:44
我使用这些想法从我自己的mysqldump输出中去掉了DEFINER子句,但我采用了一种更简单的方法:
只需删除代码和定义器之前的!
,其余的注释就会变成常规注释。
示例:
/*!50017 DEFINER=`user`@`111.22.33.44`*/
会变得无能为力,就像这样做..
/* 50017 DEFINER=`user`@`111.22.33.44`*/
不过,最简单的regexp是删除!以及这些数字
mysqldump | /usr/bin/perl -pe 's/\!\d+ DEFINER/DEFINER/' > dumpfile.sql
删除!#### DEFINER
并用DEFINER取而代之...你也可以删除定义器,这真的无关紧要-一旦"!“已经消失了
https://stackoverflow.com/questions/9446783
复制相似问题