错误显示如下: ERROR 1062 (23000) at line 1234: Duplicate entry 'xxxxx' for key 'username' ( xxxxx 是举例,每一个论坛每一个数据库都会不同,因为是用户名) 这错误一般会发生在你使用论坛后台的数据库mysql dump,分卷备份,或者Windows/linux 的mysqdump 导出/导入,Navicat Lite for MySQL的导入...等.. 导出是很正常的,但当你论坛数据库发生了错误,需要修复,把备份的.sql 重新导入到数据库的时候,问题就来了! 数据导入刚开始不久,就弹出以上那条错误!。如果刚搞碰上你数据库崩溃,正急着修复的时候就更加惨!(因为Google上没多少个解决方法能帮到你) 所以我已经是万幸了!我在做试验的时候发现了这个问题,当我想把正在正式运行的数据库的日备份文件 .sql 导入到一个测试库里头做试验的时候。导到一半,停了!。 在Google上搜索到解决方法是使用 --force 参数,即: mysql -h 192.168.10.4 -uroot -p --force test_gznow_bbs < ./test_gznow_bbs.sql 这么做的确剩下的数据都能够导进去!但是!你会发现该表中剩下的数据都被一一跳过! 就那 Discuz 7.0 为例! 由于的 username 键值位于 cdb_menbers 里头 ,所以你导入以后,会发现用户列表少了N页! 很多在论坛发过帖的用户都显示被删除或者屏蔽。 这样的话!!数据就有相当严重的问题!换句话来说!就是这个 .sql 的备份文件根本无法用!!!! 其实ERROR 1062 (23000) at line 1234: Duplicate entry 'xxxxx' for key 'username' 这错误的意思是告诉你在不允许在索引存在重复。 再说明白一点,就是你论坛上有2个用户名一模一样的用户!可能是出错造成的,可能是注册机制不完善造成的,可能是你升级论坛时候造成的....不管是什么原因。 现在你要做的,就是要把这2个重复的用户删掉其中一个!或者干脆2个都删掉(为安全起见) 如果你的数据库还好好地,这么建议你先未雨绸缪...启动 Navicat Lite for MySQL 打开 Discuz 7.0 论坛对应的库 (UCenter的先不用管) 然后执行查询,输入并 运行 查询语句 select username,count(*) from cdb_members group by username order by 2 limit 10 (查找重复的数据) 如下图: [/url] [url=http://www.oschina.net/uploads/bbs/2009/0324/162114_5q6z_0.gif] [/url] 如果差得结果入上图所示,一个或多个用户的结果显示 2 或者是高于2 ,就代表数据库中存在有2条以上的记录!
这是 cdb_members 表中的索引机制所不允许的。 上图username 项中所对应名称就告诉你哪个用户名重复了。然后你可以复制该用户名! [url=http://www.oschina.net/uploads/bbs/2009/0324/163301_K91e_0.gif] 然后进入 论坛系统设置,
[url=http://www.oschina.net/uploads/bbs/2009/0324/163431_KepH_0.gif][/url] 输入刚才你所复制的用户名,然后搜索! 怎么,看到了吧?! 真的是有2个完全相同用户名的会员! 都删除其中一个,(建议2个都删了)然后在 UCenter 也同样,搜索这个会员名,通通删掉.... 即可恢复正常导入导出了。
但如果你的论坛数据库已经崩溃,只剩下 .sql 文件,这么就麻烦了...要么你就手动在 几百 M 的 .sql 文件中找..要么你就损失一下用户.用 --force 强行导入了.
|