换服务器、换域名不丢数据:把数据库、Web 目录、配置文件和伪静态规则完整搬过去,再逐项验证。
Typecho 迁移本质是搬四样东西:数据库(MySQL 用 mysqldump 导出,SQLite 直接拷 .db 文件)、整个 Web 目录(主题、插件、usr/uploads 附件都在里面)、根目录 config.inc.php 数据库配置、以及伪静态规则(nginx rewrite 或 Apache .htaccess)。标准做法是:旧站先全量备份 → 打包传输 → 新站恢复 → 改 config.inc.php 与数据库里的站点 URL → 重新申请/续签 SSL 证书 → DNS 切到新服务器 → 对照验证清单逐条验收。最大的坑是字符集不一致导致中文乱码,以及换域名后文章里写死的旧链接没有批量替换。
Typecho 是 PHP 轻量博客,数据分散在数据库和文件系统两处,漏搬一样就出问题
所有文章、页面、评论、分类、标签和系统设置都在数据库里。MySQL 用 mysqldump 导出 SQL;SQLite 版则是 usr 目录下的一个 .db 文件,直接复制即可。
整个站点目录打包带走:usr/themes 主题、usr/plugins 插件、usr/uploads 上传的图片附件。只搬数据库不搬目录,图片和主题全丢。
站点根目录的 config.inc.php 记录了数据库地址、库名、账号密码和表前缀。迁移后要按新服务器改这里,这是 Typecho 官方安装流程生成的核心配置文件。
开启了「文章名都可访问」这种固定链接后,需要 nginx 的 rewrite 规则或 Apache 的 .htaccess 配合。规则不搬,全站 404。详见 nginx rewrite 文档。
先在旧站备好两份数据,再到新站原样恢复
mysqldump -u root -p --default-character-set=utf8mb4 库名 > typecho.sqlmysqldump 是 MySQL 官方备份工具,参数含义见 官方手册usr/ 下的 .db 文件tar -zcvf typecho-web.tar.gz ./*mysql -u root -p 新库名 < typecho.sqlconfig.inc.php,填入新数据库的地址、账号、密码usr/ 目录对 PHP 进程可写(上传附件要用).htaccess 随目录带过来了,且开启了 rewriteindex.phpnginx -t 校验再 reload数据搬完不等于迁移完成,外部链接与配置都要跟着改
| 变更项 | 要做的处理 | 常见遗漏 |
|---|---|---|
| DNS 解析 | 把域名 A 记录指向新服务器 IP;建议先低 TTL 观察,切流后再恢复 | 忘了改 CDN / 子域名记录 |
| SSL 证书 | 在新服务器上用 certbot 等重新申请或续签证书,旧证书不能带走 | 只迁了文件,忘了 HTTPS 证书,站点打不开 |
| 站点 URL | 改 config.inc.php 与数据库 option 表里的站点地址为新域名 | 只改一处,后台跳转/静态资源仍走旧域名 |
| 正文内硬链接 | 文章里写死的旧域名图片、内链做一次批量替换 | 不替换,旧站一关图片全部 404 |
| 运行环境 | 新服务器装好对应 PHP 版本与 required 扩展,参照 Typecho 安装要求 | 缺 mbstring / pdo_mysql 扩展导致白屏 |
逐项打勾,确认迁移真的完成
首页能打开、单篇文章 404 消失、分类/标签页正常、后台能登录、上传一张新图能显示、RSS 输出正常、移动端样式正常。
新旧库都用 utf8mb4,导出导入都加 --default-character-set=utf8mb4。中文乱码几乎都是字符集不一致造成的。
PHP 大版本升级后,老插件可能报错。迁移后先逐个进后台看插件列表,报错的临时停用或换替代插件,参照 Typecho 帮助文档。
usr/ 目录需对 web 进程可写,否则无法上传附件、无法改主题。解压后注意属主,必要时 chown 调整。