- 确认VPS信息:记录马来西亚VPS的公网IP、SSH端口、root或管理员账户、面板登录地址。
- 确认目标系统环境:操作系统版本、Web服务器(Nginx/Apache)、PHP版本、数据库(MySQL/MariaDB/ PostgreSQL)、磁盘空间、带宽。
- 列出要迁移的资源:网站代码路径、静态文件、数据库名与用户、SSL证书、crontab任务、第三方服务配置(邮件、API)。准备一份迁移清单。
- 代码与文件:进入项目根目录,使用tar压缩并保留权限,例如:tar -czpf site_files.tar.gz /var/www/site。
- 数据库备份:MySQL示例:mysqldump -u root -p --single-transaction --routines --triggers --events dbname > dbname.sql。
- 配置与证书:拷贝nginx/conf、php.ini、crontab -l > cron_backup.txt、/etc/letsencrypt目录(若使用Let's Encrypt)。校验备份完整性并计算MD5。
- 更新与安装必要软件:apt update && apt upgrade;安装nginx、php-fpm、mysql-server或mariadb-server、rsync、openssl、certbot等。
- 创建网站用户与目录:useradd -m deploy;mkdir -p /var/www/site && chown deploy:deploy /var/www/site。设置防火墙允许HTTP/HTTPS/SSH端口(ufw allow 22,80,443)。
- 创建数据库与用户:mysql -u root -p -e "CREATE DATABASE dbname; CREATE USER 'user'@'localhost' IDENTIFIED BY 'pass'; GRANT ALL ON dbname.* TO 'user'@'localhost'; FLUSH PRIVILEGES;"
- 从本地推送到VPS(示例):rsync -avzP --delete /path/to/site_files/ root@VPS_IP:/var/www/site/。参数说明:-a保留权限,-z压缩,--delete同步删除。
- 传输大文件或断点续传:rsync支持断点续传,或用scp复制备份包再在VPS解压:scp site_files.tar.gz root@VPS_IP:/tmp/ && ssh root@VPS_IP "tar -xzpf /tmp/site_files.tar.gz -C /var/www/site".
- 上传SQL备份:scp dbname.sql root@VPS_IP:/tmp/。
- 导入并检查字符集:mysql -u root -p dbname < /tmp/dbname.sql。导入后检查表的字符集与排序规则:SELECT TABLE_NAME, TABLE_COLLATION FROM information_schema.tables WHERE table_schema='dbname'; 若需转换,使用ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci。
- 修正连接配置:更新站点的数据库配置文件(.env或config.php)为新的DB主机/用户名/密码。
- 配置Nginx站点文件:/etc/nginx/sites-available/site,设置root、server_name(临时可用VPS_IP或域名),fastcgi_pass指向php-fpm。测试并重载:nginx -t && systemctl reload nginx。
- SSL证书申请:使用certbot --nginx -d yourdomain.com(在DNS指向VPS且80端口开放时)。如无法立即指向,可先使用自签名或临时HTTP。
- 恢复crontab:crontab deploy < cron_backup.txt,检查任务路径与环境变量。
- 本地HOSTS测试:在本地机器hosts文件添加 VPS_IP yourdomain.com,访问并完整测试业务功能。
- 日志与权限:检查nginx/php错误日志、应用日志,调整文件夹权限:chown -R deploy:www-data /var/www/site && find /var/www/site -type d -exec chmod 755 {} \;。
- 性能与安全:安装监控(top、htop)、设置swap、关闭不必要服务、配置fail2ban、限制SSH登录方式(使用密钥)。
- DNS切换策略:在DNS TTL较低时(建议提前将TTL降到300秒),修改A记录指向VPS_IP。切换后观察响应并测试主流节点。
- 回滚预案:保留本地/旧服务器24-72小时,若问题严重可把DNS改回旧IP。记录切换时间与操作人。
- 切换后检查:确认HTTPS、邮件服务、第三方回调、文件上传正常,持续监控错误日志与用户反馈。
问:在迁移过程中怎样将停机时间降到最低?
答:先做全量同步(rsync --delete)把静态文件和代码复制到VPS,先不切换DNS;将数据库设置为只读或使用双写/主从复制(建立临时replication),在DNS切换前做一次增量同步并导入最新SQL,最后切换DNS并短时间内完成最后的一次数据合并,停机仅为最后增量导入和配置切换时间。
问:如果导入后中文乱码或问号,如何修复?
答:先检查源库与目标库的默认字符集与表/字段字符集(information_schema)。若发现为latin1但实际为utf8mb4,可用 mysqldump --default-character-set=utf8mb4 导出,或对表执行 ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,并确保连接字符串中指定charset=utf8mb4。
问:迁移完成后有哪些关键项目必须验证?
答:核对(1)网站页面加载与功能性测试,(2)数据库读写与事务日志,(3)SSL证书与重定向规则,(4)后台任务/队列是否运行,(5)邮件发送与外部API回调,最后监控48小时日志与用户反馈以确保稳定。