Chinaunix首页 | 论坛 | 博客
  • 博客访问: 530691
  • 博文数量: 63
  • 博客积分: 1194
  • 博客等级: 中士
  • 技术积分: 761
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 12:44
个人简介

得之坦然,失之淡然,争其必然,顺其自然!

文章分类

全部博文(63)

文章存档

2014年(2)

2013年(22)

2012年(39)

分类: Mysql/postgreSQL

2013-04-22 15:02:10

在使用mysqldump导出本地数据库,迁移到rds的过程中,如果数据库中含有存储过程或触发器等,在dump过程中会把存储过程(存储函数或触发器)的definer dump出来,那么在迁移到rds过程中,由于用户数据库的definer和rds的用户和ip不一致而导致迁移失败(mysqldump中并没有参数用于过滤definer),报的错误为:

点击(此处)折叠或打开

  1. 1227 – Access denied; you need the SUPER privilege for this operation ;
导出的脚本中,存储过程等对象含有如下字符串:

点击(此处)折叠或打开

  1. /*!50003 CREATE*/ /*!50020 DEFINER=`openser`@`192.168.21.0/255.255.255.0`*/ /*!50003 PROCEDURE ……
  2. 或者
  3. /*!50003 CREATE*/ /*!50020 DEFINER=`root`@`localhost`*/
我们要修改的就是红色背景的字符串,将其修改为目标数据库对应的字符串(`openser`@`%`),该字符串的正则表达式为

点击(此处)折叠或打开

  1. `\S*`@`\S*`
经验证,此正则表达式能够正确匹配mysqldump导出的sql脚本,所以能够用来进行替换字符串的操作,具体替换的命令为:

点击(此处)折叠或打开

  1. sed -i "s/\`\S*\`@\`\S*\`/\`openser\`@\`%\`/g" ./proc.sql
执行成功后检查proc.sql,里面的目标字符串都已替换为`openser`@`%`
阅读(4210) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~