通过Composer升级TYPO3 9.5到10.4后数据库表缺失问题咨询
我需要为客户更新一套 TYPO3 v9.5 站点,在操作正式环境前先搭建演示站点模拟升级流程:首先执行以下命令搭建干净的 9.5 站点:
composer create-project typo3/cms-base-distribution:^9.5 .
完成 TYPO3 网页端安装流程后站点可正常运行。我的目标是将站点至少升级到 10.4 版本,先运行数据库分析工具提示一切正常,再运行升级向导,提示仅需修改数据库排序规则(当前为utf_8_general_ci)无其他操作。随后执行composer update --with-dependencies,提示无任何包需要安装、更新或移除,未触发主版本升级。
尝试多种方案未果后,我直接将composer.json替换为干净 10.4 版本生成的配置文件,再次执行composer update后代码更新成功,但数据库未同步更新,登录时提示表缺失,报错信息如下:
Oops, an error occurred! An exception occurred while executing 'SELECT content FROM cache_hash WHERE (identifier = ?) AND (expires >= ?)' with params ["d07b003d9fce07cd551ada22027bf881", 1626341203]: Table 'complan4.cache_hash' doesn't exist
(中文翻译:发生错误!执行查询语句SELECT content FROM cache_hash WHERE (identifier = ?) AND (expires >= ?)时出现异常,参数为 ["d07b003d9fce07cd551ada22027bf881", 1626341203]:complan4 库下的 cache_hash 表不存在)
我已参考 TYPO3 官方文档操作但仍未解决,请问我的升级流程存在什么问题?
升级前后 composer.json 对比
更新后的 composer.json
{ "repositories": [ { "type": "composer", "url": "https://composer.typo3.org/" } ], "name": "typo3/cms-base-distribution", "description" : "TYPO3 CMS Base Distribution", "license": "GPL-2.0-or-later", "config": { "platform": { "php": "7.2" } }, "require": { "helhum/typo3-console": "^6.0.0@beta", "typo3/cms-about": "^10.4", "typo3/cms-backend": "^10.4", "typo3/cms-belog": "^10.4", "typo3/cms-beuser": "^10.4", "typo3/cms-core": "^10.4", "typo3/cms-dashboard": "^10.4", "typo3/cms-extbase": "^10.4", "typo3/cms-extensionmanager": "^10.4", "typo3/cms-felogin": "^10.4", "typo3/cms-filelist": "^10.4", "typo3/cms-fluid": "^10.4", "typo3/cms-fluid-styled-content": "^10.4", "typo3/cms-form": "^10.4", "typo3/cms-frontend": "^10.4", "typo3/cms-impexp": "^10.4", "typo3/cms-info": "^10.4", "typo3/cms-install": "^10.4", "typo3/cms-recordlist": "^10.4", "typo3/cms-rte-ckeditor": "^10.4", "typo3/cms-seo": "^10.4", "typo3/cms-setup": "^10.4", "typo3/cms-sys-note": "^10.4", "typo3/cms-t3editor": "^10.4", "typo3/cms-tstemplate": "^10.4", "typo3/cms-viewpage": "^10.4" }, "scripts":{ "typo3-cms-scripts": [ "typo3cms install:fixfolderstructure", "typo3cms install:generatepackagestates" ], "post-autoload-dump": [ "@typo3-cms-scripts" ] } }
更新前的 composer.json
{ "repositories": [ { "type": "composer", "url": "https://composer.typo3.org/" } ], "name": "typo3/cms-base-distribution", "description" : "TYPO3 CMS Base Distribution", "license": "GPL-2.0-or-later", "config": { "platform": { "php": "7.2" } }, "require": { "helhum/typo3-console": "^5.5.5", "typo3/minimal": "^9.5", "typo3/cms-about": "^9.5", "typo3/cms-adminpanel": "^9.5", "typo3/cms-belog": "^9.5", "typo3/cms-beuser": "^9.5", "typo3/cms-felogin": "^9.5", "typo3/cms-fluid-styled-content": "^9.5", "typo3/cms-form": "^9.5", "typo3/cms-impexp": "^9.5", "typo3/cms-info": "^9.5", "typo3/cms-redirects": "^9.5", "typo3/cms-reports": "^9.5", "typo3/cms-rte-ckeditor": "^9.5", "typo3/cms-setup": "^9.5", "typo3/cms-seo": "^9.5", "typo3/cms-sys-note": "^9.5", "typo3/cms-t3editor": "^9.5", "typo3/cms-tstemplate": "^9.5", "typo3/cms-viewpage": "^9.5" }, "scripts":{ "typo3-cms-scripts": [ "typo3cms install:fixfolderstructure", "typo3cms install:generatepackagestates" ], "post-autoload-dump": [ "@typo3-cms-scripts" ] } }
你的升级流程存在以下4个核心问题:
- 错误1:Composer 默认不跨主版本更新
你原有配置的依赖约束为^9.5,该规则只会更新9.x系列的小版本,不会跳转至10.x大版本,所以第一次执行更新无响应是正常情况。不应该直接替换整个composer.json文件,正确操作是明确指定主版本号执行更新。 - 错误2:直接替换配置文件跳过兼容性校验
你替换文件的操作忽略了原有扩展的版本兼容性校验,比如旧配置中的typo3/cms-adminpanel、typo3/cms-redirects等扩展在新配置中被直接移除,会导致后续数据库迁移逻辑遗漏。 - 错误3:代码更新后未执行数据库迁移
TYPO3 代码更新后不会自动同步数据库结构,你直接访问站点时缓存表还未创建,才会触发表不存在的报错。 - 错误4:升级操作顺序颠倒
你在9.5版本就提前运行了升级向导,升级向导是对应当前代码版本的迁移工具,正确顺序应该是先完成代码层面的版本升级,再运行对应新版本的升级向导和数据库同步操作。
修复步骤
- 先回滚到9.5版本的正常状态,清空所有站点缓存
- 执行以下命令指定升级核心版本到10.4:
composer require "typo3/cms-core:^10.4" "typo3/minimal:^10.4" "helhum/typo3-console:^6.0" --update-with-all-dependencies
- 升级完成后访问
/typo3/install路径进入安装工具 - 依次执行所有升级向导步骤,再进入数据库比较工具,执行所有建议的表创建、字段变更操作
- 清空所有缓存后再访问站点即可恢复正常
内容的提问来源于stack exchange,提问作者Exo

