转储sql文件运行后,触发器丢失怎么办?
问题:Navicat转储SQL文件,导入新的数据库后,为什么还需要专门处理存储过程、触发器的用户密码?
答:转储SQL文件的时候,系统生成的存储过程、触发器脚本中会自动添加定义存储过程和触发器对应的用户信息(使用Navicat连接用户)
如果转储后新的数据库实例下没有对应的用户名和的密码,会导致所有存储过程和触发器都不能使用。
PS:若转储的数据库和恢复的数据库在同一个数据库实例下,则不存在该问题
特别说明:如客户有个性化触发器,请提前备份好数据库和个性化触发器!
解决方案1:新的数据库实例下添加同样的数据库用户名和密码(新建用户之后需要刷新数据库用户或者重启数据库)
解决方案2:去掉脚本中存储过程和触发器对用户名和密码的定义,在恢复的数据库下重新执行
操作步骤:
1)用notepa++打开刚才转储的sql文件
2)CTRL+F,查找 DROP VIEW IF EXISTS `vw_oa_attendance`; ,删除上面所有的脚本文件。
处理技巧:光标定位到下一行,然后拖动滚动条到最上面,按住SHIFT键,用鼠标点击第一行,然后按下DELETE 见删除所有选中的脚本,CTRL+S保存文件即可。
3)查找余下脚本(储存过程、触发器)对用户的定义,并全部替换为空。
■ 查找并全部替换 DEFINER=`root`@`localhost` 为空
■ 查找并全部替换 DEFINER=`51sql`@`%` 为空
说明:51sql是数据库的用户名,要替换成你自己的数据库用户名
■ 查找 DEFINER= 确认,确认脚本没有对用户的定义
4)完成以上操作步骤后,新建查询—>复制粘贴存储过程脚本->点击运行