PHP项目从A服务器迁移到B服务器是运维场景中的常见需求,迁移的核心是确保所有项目依赖的内容完整转移,同时保证新旧服务器的运行环境兼容,避免出现功能异常或数据丢失的情况。

一、迁移前需要备份的内容
在正式开始迁移前,需要先梳理A服务器上所有和项目相关的内容,避免遗漏关键数据,需要备份的内容主要包含以下几类:
1. 项目源代码文件
包含项目的所有PHP脚本、前端静态资源、配置文件等,需要排除运行时生成的缓存文件、日志文件等无用内容。可以通过打包压缩的方式备份,避免文件传输过程中丢失权限信息。
2. 数据库数据
如果项目使用了MySQL、PostgreSQL等数据库,需要备份完整的数据库结构和数据,避免迁移后数据丢失。建议使用数据库自带的导出工具生成完整的SQL备份文件。
3. 服务器环境配置
记录A服务器上的PHP版本、扩展安装情况、Web服务器(Nginx/Apache)的配置规则、系统环境变量等内容,确保B服务器的环境和A服务器保持一致,避免兼容性问题。
4. 其他依赖文件
如果项目使用了第三方存储、证书文件、定时任务配置等,也需要一并备份,避免迁移后相关功能无法使用。
二、迁移完整操作步骤
1. 备份A服务器内容
首先打包项目源代码,以Linux服务器为例,假设项目目录为/var/www/php_project,执行以下命令打包:
# 进入项目上级目录 cd /var/www # 打包项目文件,排除runtime缓存目录和日志目录 tar -czvf php_project_backup.tar.gz --exclude=php_project/runtime --exclude=php_project/logs php_project
接着备份数据库,以MySQL为例,执行以下命令导出数据库:
# 导出数据库,-u后面是用户名,-p后面会提示输入密码,db_name是数据库名 mysqldump -u root -p db_name > db_backup.sql
同时记录A服务器的PHP版本和已安装扩展,执行以下命令查看:
# 查看PHP版本 php -v # 查看已安装的PHP扩展 php -m
2. 准备B服务器环境
首先在B服务器上安装和A服务器版本一致的PHP,以及对应的扩展,以Ubuntu系统安装PHP8.1为例:
# 更新软件源 sudo apt update # 安装PHP8.1核心 sudo apt install php8.1 # 安装常用扩展,根据实际A服务器的扩展列表调整 sudo apt install php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml
接着安装Web服务器,以Nginx为例:
sudo apt install nginx
安装完成后,将A服务器的Nginx配置文件复制到B服务器的/etc/nginx/sites-available/目录下,然后创建软链接到/etc/nginx/sites-enabled/目录,执行以下命令:
# 假设配置文件名为php_project.conf sudo ln -s /etc/nginx/sites-available/php_project.conf /etc/nginx/sites-enabled/ # 检查Nginx配置是否有误 sudo nginx -t # 重启Nginx生效 sudo systemctl restart nginx
3. 传输备份文件到B服务器
可以使用scp命令将A服务器的备份文件传输到B服务器,假设B服务器IP为192.168.0.1,用户为ubuntu:
# 传输项目压缩包 scp php_project_backup.tar.gz ubuntu@192.168.0.1:/tmp/ # 传输数据库备份文件 scp db_backup.sql ubuntu@192.168.0.1:/tmp/
4. 还原项目与数据
登录B服务器,解压项目压缩包到Web根目录,假设Web根目录为/var/www/:
# 解压文件到/var/www/目录 sudo tar -xzvf /tmp/php_project_backup.tar.gz -C /var/www/ # 设置项目目录权限,避免PHP没有读写权限 sudo chown -R www-data:www-data /var/www/php_project
接着还原数据库,先登录MySQL创建对应的数据库和用户:
# 登录MySQL mysql -u root -p # 创建数据库 CREATE DATABASE db_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; # 创建用户并授权 CREATE USER 'db_user'@'localhost' IDENTIFIED BY 'db_password'; GRANT ALL PRIVILEGES ON db_name.* TO 'db_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
然后导入备份的SQL文件:
mysql -u db_user -p db_name < /tmp/db_backup.sql
5. 调试与验证
还原完成后,访问B服务器的项目地址,检查页面是否正常加载,测试核心功能是否可用。如果出现问题,可以查看Nginx错误日志和PHP错误日志排查问题,日志路径通常在/var/log/nginx/和/var/log/php8.1-fpm.log。
确认项目运行正常后,可以将域名解析切换到B服务器的IP,完成整个迁移流程。
三、迁移注意事项
- 迁移前建议先在B服务器做测试,确认所有功能正常后再切换正式环境,避免影响用户使用。
- 如果项目有定时任务,需要将A服务器的定时任务配置同步到B服务器,执行
crontab -l查看A服务器的定时任务,再在B服务器执行crontab -e添加对应的任务。 - 迁移完成后不要立刻删除A服务器的内容,保留一段时间,确认B服务器运行稳定后再清理,避免出现问题无法回滚。