菜青虫个人笔记 - 2024年5月
type: channel
link: https://439700.xyz/index.php/2024/05/
description: 个人折腾日记，网络相关，路由器相关，服务器，NAS等
items: Discuz!3.4升级到Discuz!X3.5常见问题汇总

Discuz!3.4升级到Discuz!X3.5常见问题汇总
type: item
date: 2024-05-11T10:18:40+08:00
description: Q001：GBK编码升级后用户反馈无法登录？A001：您升级前为GBK或BIG5编码，由于X3.5适配的UCenter 1.7.0 更新了数据库编码，为了防止本地化编码版本内以本地化编码的安全提问内的非 ASCII 文字导致用户登录受阻，因此如您站点为本地化编码则将为您清空安全提问，请将此情况如实告知用户，并要求用户在登录时请不要输入安全提问。（如您希望自行编写兼容代码，请自行在后续流程选择不清空用户的安全提问。）Q002：升级UCenter 1.7.0报错（Warning: fopen(../data/logs/X3.5_upgrade_ucenter.php): failed to open stream: No such file or directory in uc_server/update_ucenter_adult.phpon line990）A002：需要给UC目录（通常为/uc_server/）的升级日志目录（/data/logs/）赋予写权限。Q003：升级完毕后还一直提示“升级数据”A003：升级关闭站点的提示语吧？升级后记得重新打开站点。Q004：升级Ucenter 7.0时显示数据库members表里缺少email这个字段A004：标准Ucenter必定存在email字段的，此提示一般是以前某些修改导致email字段不存在或未被设置为索引，进入数据表（使用PhpMyAdmin）将pre_ucenter_members表的email字段设置为索引后再升级。Q005：升级后网站变的非常缓慢（MySQL5.5）A005：当 MySQL < 5.7 或 MariaDB < 10.2 时， InnoDB 性能下降较为严重，因此在生产系统上运行的站点应升级版本至 MySQL >= 5.7 或 MariaDB >= 10.2 以避免此问题。Q006：升级后用户IP都变成一样的了（开启了CDN）A006：Discuz!X3.5使用CDN时，获取用户真实IPQ007：升级过程中提示Specified key was too long; max key length is 767 bytesA007：这是由于X3.5将升级数据库为InnoDb引擎，索引字段长度和Myisam不同，需要看报错中的具体表，进行索引字段长度变更，一般255的，建议变更为190Q008：升级过程中提示(1061) Duplicate key name 'gpmid'ALTER TABLE common_member_grouppm ADD INDEX gpmid(gpmid);A008：应该是升级出错后又直接再次执行升级文件导致的，升级出错后建议回滚数据后再重新操作。同时，针对该问题，回滚数据后可以进入“pre_common_member_grouppm”数据表检查索引gpmid是否存在，如存在，可以先予以删除再操作升级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_…