我有一套PHP+MYSQL的源码(买来的)。数据库中有280个表,这些表格编码不相同,有
latin1_general_ci               
utf8_general_ci                
gbk_chinese_ci 这三种,我用PHPADMIN在线备份了,108M左右,可在服务器上(linux)上还原错误,是不是编码问题?这种情况我改如何还原?服务器是合租的,没有管理权限,只能上传后通知服务器管理员,让他给我还原,他说提示错误“ERROR 1227 (42000) at line 5842: Access denied; you need the SUPER privilege for this operation 
”这种情况下我该如何做,才能在合租服务器上顺利还原数据库?

解决方案 »

  1.   

    从错误提示上看是权限的问题。 你先看一下  line 5842 是什么语句。
      

  2.   

    Access denied; you need the SUPER privilege for this operation 
      

  3.   

    先顶一下,我也遇到同样的问题。可以比你好一点。我是unix上的一个mysql数据库要转移到本地的windows上的mysql上来,出理问题,导出的sql脚本总是不是全部执行完,造成,数据不完整,同时还出现中文就是乱码。小弟搞了两周试了很多办法还是不行。。
      

  4.   

    至于还原错误的问题,应该是权限的问题, 表还原应该没什么问题,一般 视图和存储过程的还原都会出点问题,都是因为不同用户造成的,有时甚至是因为root重名同名的问题,请看下面的视图和存储过程的DDL:
    -- View "number_key_motif" DDLCREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `number_key_motif` AS select .....;
    -- Procedure "left_5" DDLCREATE DEFINER=`root`@`localhost` PROCEDURE `left_5`()
    BEGIN.....END;看到了吧,视图和procedure的DDL都是带有Definer的信息的,而phpadmin/mysqladmin/navicat等管理工具在备份时都是直接把DDL语句导出的,
    而再还原时肯定也是试图去执行那些DDL的,这样当然在本例中它们是尝试去用root的definer在另一台导入的服务器上去执行建视图,存储过程等操作的。所以建议:
    1.在不同服务器直接保持用户名的同一,尽量用同一用户名,当然是为了以后一些工具备份的方便了,这样不需要自己去改工具导出的SQL脚本中的definer的信息
    2.尽量不要用root用户, 因为你不可能在你用的每台服务器上都可以使用root用户的
    如实在想用,可自己使用另一服务器上的统一用户名, 然后给那用户赋予至高无上的,与root相同的权限楼主的那个
    “ERROR 1227 (42000) at line 5842: Access denied; you need the SUPER privilege for this operation 
    ” 
    的错误应该是由于导入时遇到的DEFINER=`root` 等脚本的影响产生的吧
    要SUPER 的privilege不差于已经拥有了root的所有权限了,你不可能要求租用的服务器的administrator给你那样的权限的
    可以去新建与租用服务器上同用户名的用户××,然后改下自己要还原导入的脚本,把其中的root或一些特权用户 的字符全替换成××希望对你有帮助,因为我也曾经遇到过类似的导入还原的问题,后来这样解决了编码乱码问题实在是繁琐,所以我的库里面就没有用中文了