海洋CMS从苹果CMS迁移数据怎么做?步骤详解
苹果CMS 和海洋CMS 之间没有官方一键迁移工具,唯一可控的做法是「先导出源库数据,按字段映射写成 INSERT 语句,再导入目标库」;一次完整迁移通常需要 2–4 小时,其中八成时间花在分类 ID 对齐和播放地址格式校验上。
苹果CMS 和海洋CMS 的表结构能直接通用吗?
不能,两者表名和字段名都不同,必须先做映射再导入。苹果CMS v10 默认表前缀是 mac_,影片主表是 mac_vod、分类表是 mac_type;海洋CMS 默认表前缀是 sea_,影片主表是 sea_data、分类表是 sea_type。结论:把 mac_vod 直接改名成 sea_data 一定会报字段不存在错误。
好消息是两者同源,影片数据模型接近:都有影片名、副标题、分类 ID、封面图、简介、播放组、播放地址这几个核心字段。播放地址串格式也一致——单集写成 集数名$播放地址,多集之间用 # 分隔,多个播放组之间用 $$$ 分隔。这意味着播放地址这一块基本可以原样搬运。
导入前务必执行一次 DESCRIBE sea_data; 和 DESCRIBE mac_vod;,把两边的字段名并排列出来。不同版本(苹果CMS v8 与 v10、海洋CMS 各分支)字段名会变,下面给的是常见对应关系,最终以你机器上的实际输出为准。
| 苹果CMS mac_vod | 海洋CMS sea_data | 说明 |
|---|---|---|
| vod_id | v_id | 主键,可重新生成 |
| vod_name | v_name | 影片名 |
| vod_sub | v_sub | 副标题 |
| type_id | tid | 分类 ID,必须重映射 |
| vod_pic | v_pic | 封面图 URL |
| vod_content | v_content | 简介,注意标签清洗 |
| vod_play_from | v_playfrom | 播放组,$$$ 分隔 |
| vod_play_url | v_playurl | 播放地址,# 分隔 |
迁移前必须先确认哪三件事?
第一,确认版本和表前缀。执行 SELECT VERSION(); 拿到 MySQL 版本,执行 SHOW TABLES LIKE 'mac%'; 确认前缀。第二,确认字符集,两边都要是 utf8mb4,用 SHOW CREATE TABLE mac_vod; 查看,源库是 utf8 的话先用 ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4; 转一次,否则导入后影片名里的生僻字和 emoji 会变问号。第三,先把分类表迁完再迁影片表,顺序反了 tid 会指向不存在的分类,前台会显示「未知分类」。
具体迁移步骤是什么?
第一步,备份源库:mysqldump -u root -p maccms > maccms_backup.sql。
第二步,把源数据导成中间文件,用竖线分隔避免影片简介里的逗号截断字段:
SELECT vod_id,vod_name,vod_sub,type_id,vod_pic,vod_content,vod_play_from,vod_play_url,vod_time
FROM mac_vod INTO OUTFILE '/tmp/vod.csv'
FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
第三步,用 Python 或 PHP 读这个文件,按上表替换字段名,输出成一批 INSERT INTO sea_data (...) VALUES (...);。这一步顺手做三件清洗:v_content 里去掉苹果CMS 特有的模板标签;v_pic 里把老域名换成新域名;v_id 直接留空让 MySQL 自增。
第四步,导入:mysql -u root -p seacms < sea_data.sql。
第五步,图片换域名,一条 SQL 搞定:UPDATE sea_data SET v_pic = REPLACE(v_pic,'old.com','new.com');
第六步,登录海洋CMS 后台清一次缓存,再打开一个影片详情页验收播放地址是否正常分集。
有没有更省事的办法?
有,如果影片数量在 2000 部以内,重新采集比写迁移脚本更快。海洋CMS 支持从资源站直接采集,配置好接口后按分类批量入库,图文和播放地址一次到位,省掉字段映射和图片搬家两个最容易出错的环节。只有当你有大量独家影片、原创简介或用户数据必须保留时,才值得走 SQL 迁移这条路。
迁移时最容易踩的坑有哪些?
主键冲突排在第一位,源库 vod_id 已经被占用时要改成自增而非原样导入。第二是播放组名称必须和海洋CMS 后台已启用的播放器解析名完全一致,比如源站写的是 youku、目标站配置的是 youkuyun,前台就播不了。第三是 v_en 拼音字段,海洋CMS 部分模板用它生成静态页路径,留空会导致 URL 重复,导入后用脚本按 v_name 批量生成一次。
总结一下:迁移的核心是「分类先走、影片后走、字段映射表对着 DESCRIBE 结果写、播放地址原样搬、封面图批量换域名」,六步走完再清缓存验收;数据量小就别折腾 SQL,直接重新采集。
原文链接:https://www.gj0.com/thread-69.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。