Discuz 7.0 导入备份数据出错:ERROR 1062 (23000)  的解决方法!

范堡 发布于 2009/03/24 15:45
阅读 4K+
收藏 0

错误显示如下:

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 (查找重复的数据)

如下图:

如果差得结果入上图所示,一个或多个用户的结果显示 2 或者是高于2 ,就代表数据库中存在有2条以上的记录!
这是 cdb_members 表中的索引机制所不允许的。

上图username 项中所对应名称就告诉你哪个用户名重复了。然后你可以复制该用户名!

然后进入 论坛系统设置,

 

输入刚才你所复制的用户名,然后搜索!

怎么,看到了吧?! 真的是有2个完全相同用户名的会员!

都删除其中一个,(建议2个都删了)然后在 UCenter 也同样,搜索这个会员名,通通删掉.... 即可恢复正常导入导出了。

 

但如果你的论坛数据库已经崩溃,只剩下 .sql 文件,这么就麻烦了...要么你就手动在 几百 M 的 .sql 文件中找..要么你就损失一下用户.用 --force 强行导入了.

 

 

加载中
返回顶部
顶部