船说 CMS 低版本如何升级
学完这篇,你能把跑在老版本上的船说 CMS 安全升级到新版本,并且在升级失败时能一键退回,不丢数据。
第一步:先搞清楚你现在站在哪一版
升级前必须确认三件事:当前版本号、服务器环境、有没有改过核心代码。这三条决定了后面能不能直接覆盖升级。
- 查版本号:登录后台,点左侧菜单「系统」→「系统信息」,版本号一般显示在这个页面的底部,形如
v1.x.x。 - 查环境:SSH 登录服务器后执行
php -v和mysql -V,看清楚 PHP 和 MySQL 的实际版本。新版船说 CMS 通常要求 PHP 7.4 以上、MySQL 5.7 以上,环境不达标就先升环境,别急着动程序。 - 查二开:如果你改过
app/、core/里的文件,或者加过自定义插件,先用官方同版本原始包做一次目录对比,把改动过的文件路径记到记事本里。
注意:跨大版本不能一步到位。比如从
v1.x直接升到v3.x,官方一般要求1.x → 2.x → 3.x逐级升。跳版升级最容易出现数据表字段缺失、后台白屏的问题。
第二步:全量备份,一步都不能省
这一步要拿到两份东西:一份站点文件压缩包、一份数据库 SQL 文件,出任何问题都靠它回滚。
用宝塔面板的话:点「网站」→ 找到你的站点 → 点「备份」按钮 → 分别执行「备份网站」和「备份数据库」,备份文件默认落在 /www/backup/ 下。
用命令行的:
tar -czf /root/site_$(date +%F).tar.gz /www/wwwroot/你的站点目录
# 备份数据库
mysqldump -u root -p --default-character-set=utf8mb4 你的库名 > /root/db_$(date +%F).sql
注意:备份完一定要验证,别只看文件生成了就放心。
tar -tzf 包名.tar.gz | head能列出内容,ls -lh看 SQL 文件大小是否正常(几 KB 的多半是空的)。
第三步:先在本地或测试环境演练一遍
直接在生产站上升级,等于拿真数据做实验。正确做法是先复制一份演练环境。
具体操作:新建一个子目录(如 /www/wwwroot/test),解压第二步的文件备份进去,再新建一个测试数据库,导入刚才的 SQL,然后把配置文件 config/database.php 里的库名改成测试库。这样演练出问题不影响线上。
第四步:下载对应版本的升级包
到官方发布渠道下载升级包,重点看两点:包名里标的目标版本号,以及包里是否带 upgrade 或 update 目录。带升级脚本的才是增量包,只有完整文件的通常是全量包。
下载后本地解压,先看根目录有没有 readme.txt 或 UPGRADE.md,升级说明和特殊要求一般写在这里,务必先读。
第五步:覆盖文件,但要保留该保留的
全量包升级的做法是覆盖,但不能无脑全覆盖。用 FTP 或宝塔「文件」管理器上传时,下面这些目录和文件不要覆盖:
config/整个目录(里面有数据库连接信息,覆盖后连不上库)uploads/、public/uploads/(用户上传的图片视频)template/或templates/(你的前台模板,除非你要用新版默认模板)runtime/(缓存,覆盖不覆盖都行,但升级前建议先清空)
其余核心目录(app/、core/、public/static/ 等)直接覆盖。
注意:覆盖前先把
config/database.php单独复制一份到电脑桌面,万一覆盖了直接传回去。
第六步:执行升级脚本
这一步让新代码把数据库结构改成新版的样子。
覆盖完成后,浏览器访问 http://你的域名/install/upgrade.php(部分版本是 update.php 或 upgrade/index.php,以包里实际文件名为准)。按提示点「开始升级」,中间不要刷新、不要关页面。数据量大时可能停在某个百分比好几分钟,耐心等。
如果升级完成提示存在,说明数据库已经改好;如果提示失败,先看具体报错信息,多半是数据库用户权限不足或某个字段已存在——后者可以忽略继续。
第七步:清缓存并做回归测试
升级脚本跑完后,登录后台,进「系统」→「清除缓存」,把模板缓存、数据缓存、日志全勾上清一遍。然后逐项检查:首页能否打开、栏目页能否打开、详情页能否打开、后台上传图片是否正常、登录退出是否正常。
如果页面样式错乱,按 Ctrl + F5 强制刷新,多半是浏览器缓存了旧 CSS。
第八步:出问题怎么回滚
发现严重问题就回滚,别硬修。操作是:把第二步的文件包解压覆盖回站点目录,再进 phpMyAdmin 把你那个库的所有表删除,然后导入备份的 SQL 文件。两分钟就能回到升级前的状态。
小结
- 升级前必查三件事:版本号、PHP/MySQL 版本、有没有二开
- 跨大版本必须逐级升,不能跳版
- 文件和数据库都要备份,并且验证备份文件是否可用
- 先在测试环境演练一遍,再动生产站
- 覆盖文件时保留
config/、uploads/、template/ - 升级脚本跑完后清缓存,并逐页做回归测试
原文链接:https://www.gj0.com/thread-637.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。