1. 准备清单:列出网站域名、来源VPS与目标VPS的IP/登录凭证、SSH端口、root或sudo权限、数据库类型与版本、PHP/NGINX/Apache版本、SSL证书位置与计划停机时间。小分段:(1)确认目标VPS的系统环境与磁盘空间;(2)将关键配置文件备份到本地;(3)将DNS TTL在切换前24小时降低为300秒以缩短传播时间。
2. 文件备份:停止写入服务或将站点设为维护模式,然后使用tar或rsync做增量备份。示例命令:tar czf /root/site-backup-$(date +%F).tar.gz /var/www/html 。数据库备份:MySQL示例:mysqldump -u root -p --single-transaction --routines --events --triggers dbname > dbname.sql 。小分段:检查备份完整性并计算校验和(sha256sum)。
3. 推荐rsync(节省带宽、可断点续传):rsync -azP -e "ssh -p 22" /var/www/html/ user@target_ip:/var/www/html/ 。注意保持文件权限与所有者:添加 --chmod=Du=rwx,Dg=rx,Fu=rw,Fg=r 选项按需调整。小分段:首次传输用rsync全量,切换前再做一次增量同步以减少停机。
4. 在目标VPS上恢复:先创建数据库和用户,设置相同的字符集与排序规则。示例:mysql -u root -p -e "CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 然后 mysql -u root -p dbname < dbname.sql 。小分段:若MySQL版本有差异,先用 mysqldump --compatible=... 或使用pt-upgrade测试兼容性,处理SQL MODE差异与存储引擎调整。
5. 安装相同或兼容的软件包:PHP扩展、composer依赖、NGINX/Apache配置文件同步(注意socket或端口差异)。SSL:若使用Let's Encrypt,先在目标VPS暂用域名验证(或使用DNS验证),可以复制证书与私钥到 /etc/letsencrypt/live/ 。防火墙:开放必要端口(22,80,443),确认台湾机房的内网或防火墙规则。小分段:调整PHP-FPM用户/组和文件所有者,重启服务并检查error.log。
6. 测试步骤:在本地hosts文件中将域名指向目标IP进行功能测试(页面、登录、上传、邮件)。再次增量同步文件与数据库:先停站点(维护模式),再运行一次 rsync 与导出/导入最新增量数据。最后一步:将DNS指向目标IP并等待TTL生效。小分段:保持旧服务器至少72小时以便回滚并监控流量。
7. 答:在切换前48小时将旧域的TTL调低到300秒;切换时先把网站设为静态维护页并完成最后一次增量rsync与数据库导出导入;更新DNS后,利用本地hosts提前验证目标环境;切换后保留旧服务器运行一段时间以处理遗漏同步或回滚。
8. 答:检查PHP-FPM服务是否运行并监听正确socket或端口;查看Nginx错误日志(/var/log/nginx/error.log)与PHP-FPM日志,确认worker数量、超时配置(fastcgi_read_timeout)及权限;如果socket权限导致403/502,调整www-data或php-fpm用户与文件所有者并重启服务。
9. 答:数据库错误先查看MySQL错误日志并用SHOW ENGINE INNODB STATUS定位锁或长事务;若版本不兼容,用pt-table-sync或手动修正SQL;文件权限问题用 find /var/www/html -type f -exec chown www-data:www-data {} + 和目录 chown + chmod 750/640 等命令统一修复;最后检查SELinux或AppArmor是否阻止访问。