我有一套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
”这种情况下我该如何做,才能在合租服务器上顺利还原数据库?
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
”这种情况下我该如何做,才能在合租服务器上顺利还原数据库?
-- 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或一些特权用户 的字符全替换成××希望对你有帮助,因为我也曾经遇到过类似的导入还原的问题,后来这样解决了编码乱码问题实在是繁琐,所以我的库里面就没有用中文了