关于昨日论坛数据回档一天公告【2015.11.26】
很抱歉的通知大家,就在刚刚凌晨进行mysql升级,升级过程中导致论坛数据库文件损坏无法恢复,还好我们每天都有备份数据库,只能忍痛丢失最近24小时的发帖数据恢复到昨天凌晨的备份。受影响内容:
1、最近24小时的发帖回帖数据都没有了,任何昨天操作的东西也都没有了,有发重要主题帖的同学只能重新发帖,非常抱歉。
2、昨天注册的用户需要注意,我们已经把注册用户信息重新添加到数据库中,用户只要通过当时注册的邮箱重置下密码再登陆就可以了,不需要重复注册。
事故原因:
哎哎哎,事情是这样的,升级mysql前脚本自动通过mysqldump去备份数据库(坑,都是坑),由于论坛是gbk编码,备份导出的时候脚本默认用utf8,导致数据被转码了,转码过程中就丢失了很多数据,然后升级完成后,脚本居然自己把数据库恢复到现有的数据库中,恢复就出现错误,导致现有的数据库出现问题,强制导入后丢失大量数据。
事故反省:
1、测试必不可少。
之前每次升级都会先在测试机中进行,这次懒了,加上这个脚本上次已经用过一次,就不以为然。
2、备份必须做。
操作之前每次都备份,这种事情之前可能发生过,但好习惯是更新后把自己备份的数据库默认恢复一次,这次成sb了,还好有每天定时备份。
后记:
事情已经发生过去6个小时,这期间一直在查资料分析原因,想试试能不能把数据恢复,最后发现不止导入有问题,当时备份的导出数据由于编码问题有大量数据都乱码了,所以只能舍弃,否则影响更大。
太困了,先去睡觉,有事大家留言。{:1_937:} Hmily 发表于 2015-11-26 15:48
转编码好像不太好搞,也说有数据会有异常的,有经验吗?
之前公司做过编码的自动识别和编码转换,都是在linux下搞的。自动识别是用的网上一个第三方的库做了一点二次开发(库名字回头我找一下看还能不能找到,好像是叫uchardet,很不错,一个家伙从mozilla的代码中摘出来的firefox的编码自动识别代码)。编码转换是直接用iconv库实现其他编码到utf8的转换。最终效果还可以。
哦,上面这些讲的意思是,实践中发现,只要源编码和目的编码指定的没有问题,转换并没有遇到过问题。只有在指定有问题的时候才出现过转换问题。
之前遇到的问题都是出现在数据库这一块的,大部分汉字在从gbk向utf8转换的过程中,会由2字节变成3字节,体积发生膨胀,导致按照原先的数据库字段长度可能放不下原先的数据,会出现数据被截断的情况。这种问题不知道discuz这种大的框架有没有相应的解决方案。
其实想想,现在论坛数据这么多,很难保证转换数据、论坛程序、插件和其他相关的工具甚至有些论坛附件不出问题和不遗漏,而且目前论坛整站代码加数据都用gbk其实也没有什么问题,再加上转码会导致数据膨胀。。。算了,想到这里我觉得只要论坛不是要把discuz换成别的的话,现在这样挺好的{:1_907:} 每天备份到是个好习惯,如此之大的论坛,还是小心为妙 {:1_906:}泪流满面。之前说十分钟,然后又说一小时。 来看看 又重置了。。。 建议数据库全面转 utf-8.. 大H辛苦了!数据丢失是很严重的!还好只是一天的数据,不管怎么样还是支持吾爱的! 我也犯过相同的错误,确实,备份前的测试必不可少!!! 还好咱论坛是个好地方,