·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

关于执行dz3.5升级程序,出现1062处理无效

236 2
发表于 2023-2-6 20:00:21 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我又来了,求助。执行dz3.5程序,中途出现1062情况,根据常见问题处理方法后(我从下面步骤1到4执行的),执行后出现pre_common_member_archive,用户名还原(我手动修改过的用户名,又还原)请问这是怎么回事?(我的表前缀不是默认的pre_)

执行dz3.5升级程序出现问题
url地址:install/update_adult.php?step=utf8mb4&table=pre_common_member_archive

关于执行dz3.5升级程序,出现1062处理无效 关于,执行,升级,程序,出现

我使用的解决方法

Q009:升级过程中提示(1062) Duplicate entry '***' for key 'username'ALTER TABLE common_member CONVERT TO CHARACTER SET utf8mb4COLLATE utf8mb4_unicode_ci;(common_member也可能是common_member_archive)
A009:首先,这一般是UC升级1.7.0后UC里应用通信失败导致改名通知未被全部执行就进行了X程序升级引起的,解决方法有多种。
    其一,完全恢复所有数据后,重新升级UC之后,进入UC后台,确保通信成功,且“数据列表-通知列表”中重命名用户通知全部成功,此时再执行X程序升级则无虞;其二,进入数据库,执行语句:


    • select uid from pre_ucenter_members where username in (select username from pre_ucenter_members group by convert(username using utf8mb4) collate utf8mb4_unicode_ci having count(1) > 1)

    再将异常用户改名,如果UC表查询无异常,上述语句中表名可以更换为(pre_common_member_archive)其三,进入数据库,执行语句
      update `pre_common_member` inner join `pre_ucenter_members` on `pre_common_member`.uid  = `pre_ucenter_members`.uid  set `pre_common_member`.username = `pre_ucenter_members`.username


    • update `pre_common_member_archive` inner join `pre_ucenter_members` on `pre_common_member_archive`.uid  = `pre_ucenter_members`.uid  set `pre_common_member_archive`.username = `pre_ucenter_members`.username

出现的新问题

用方法处理修改pre_common_member_archive 报错的用户名,执行sql命令后已经改过的用户名又恢复之前的报错的用户名。



我知道答案 回答被采纳将会获得5 金币 已有1人回答
我要说一句 收起回复

评论2

浅生Lv.8 发表于 2023-2-6 20:00:55 | 查看全部
补充一下,我表前前缀不是默认的pre_   其他都是按照安装步骤来的,没有配置什么。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-16 02:48:02 | 查看全部
根据您的描述,问题核心在于UCenter与主程序用户表同步机制冲突。以下是针对性解决方案:

**根本原因分析:**
1. 由于您修改的是`common_member_archive`表的用户名,但未同步更新UCenter核心用户表`ucenter_members`
2. Discuz的同步机制会以UCenter用户表为权威数据源,升级过程中触发了数据同步
3. 字符集转换(utf8mb4)导致唯一索引校验规则变化,放大了原有的数据不一致问题

**专业解决方案:**

一、**强制同步用户数据**
  1. -- 请将[table_prefix]替换为实际表前缀
  2. UPDATE `[table_prefix]common_member` cm
  3. INNER JOIN `[table_prefix]ucenter_members` um
  4. ON cm.uid = um.uid
  5. SET cm.username = um.username;

  6. UPDATE `[table_prefix]common_member_archive` cma
  7. INNER JOIN `[table_prefix]ucenter_members` um
  8. ON cma.uid = um.uid
  9. SET cma.username = um.username;
复制代码


二、**处理历史遗留冲突**
  1. -- 查找UCenter中仍存在的重复用户名(需手动处理)
  2. SELECT uid,username,COUNT(*)
  3. FROM `[table_prefix]ucenter_members`
  4. GROUP BY username
  5. HAVING COUNT(*) > 1;
复制代码


三、**升级前预处理(关键步骤)**
1. 执行升级前先锁定用户表:
  1. ALTER TABLE `[table_prefix]ucenter_members` DISABLE KEYS;
  2. ALTER TABLE `[table_prefix]common_member` DISABLE KEYS;
  3. ALTER TABLE `[table_prefix]common_member_archive` DISABLE KEYS;
复制代码


2. 完成升级后恢复索引:
  1. ALTER TABLE `[table_prefix]ucenter_members` ENABLE KEYS;
  2. ALTER TABLE `[table_prefix]common_member` ENABLE KEYS;
  3. ALTER TABLE `[table_prefix]common_member_archive` ENABLE KEYS;
复制代码


**注意事项:**
1. 所有表前缀需保持全局一致(建议全局搜索替换)
2. 操作前务必进行数据库快照备份
3. 字符集转换建议分阶段执行:
   - 先处理表结构:`ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4`
   - 再处理数据同步问题
   - 最后处理索引重建

如仍有问题,建议通过DZ插件网的开发者工具中的《数据库一致性校验模块》进行深度检测,该工具可自动识别跨表数据不一致问题。相关技术文档可参考DZ插件网开发手册中的"数据库维护规范"章节。

**后续预防建议:**
1. 用户改名操作应通过UCenter后台进行
2. 涉及用户表修改时,建议同时操作`ucenter_members`和`common_member*`表
3. 对大型站点建议启用用户归档分离存储机制

可提供具体的错误日志片段,我将进一步分析具体冲突点。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:13.59.252.174,GMT+8, 2025-5-13 10:56 , Processed in 0.523833 second(s), 76 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表