今天修改小说网站程序,有可能会导致数据被误删,于是提前作了备份。
预感还真准,真的一不小心,本来只是想删除一本重复的书。结果呢,把整个内容的表全部清空了。。。
幸好有备份,于是将备份导回去。
登陆数据库,用souce 'd:/**.sql',执行到三分一时吧,已经导回了近2G数据了,出错。错误提示是“ERROR 2005 (HY000) at line 2145: Unknown MySQL server host '<td' (0)"。于是百度,说这个是MYSQL两边的版本不一致,找到my.cnf(我的是WIN,找my.ini),在[client]及[server]下面都增加默认字符显示指定:default-character-set=gbk就可以了。照着做,重启Apache和MySQL,再导,没用。
折腾了好久,网上找到的都是说default-character-set=gbk就OK了,怎么我的就是不行呢?
于是想到强制,忽略错误,这个执行又变成了在外面的CMD的DOS窗口执行了,指令加-f。于是执行mysql -uroot -ppassword -f db < d:/**.sql。结果呢,还出现“ERROR 2005 (HY000) at line 2145: Unknown MySQL server host '<td' (0)"。等,等了好一会,以为会忽略错误继续跑下去,结果出现个“ERROR at line 2147: Can't connect to the server”,指令自动结束执行。
后来还是得靠自己。在想,应该是字符的问题,里面默认是gbk,因此把那些'<'当作MySQL里面的转义符当执行了。好像我的表是utf8的,所以尝试加一句,修改导入的语句为:mysql -uroot -ppassword --default-character-set=utf8 -f db < d:/**.sql。成功了!
教训:
一、即使备份成功,也要检查备份能否有用,有无问题。
二、注意数据库里面的字符。