核心原则:
- 备份,备份,再备份! 在进行任何操作之前,必须拥有完整、可用的备份,这是你最后的救命稻草。
- 在本地或 Staging 环境中测试:不要直接在生产环境上操作,先在本地电脑或临时服务器上完整演练一遍迁移过程。
- 保持源环境不变:在迁移完成并确认一切正常之前,不要对原网站做任何修改,以免数据不一致。
第一阶段:迁移前准备与规划
步骤 1:评估网站与目标环境
-
源网站分析:
(图片来源网络,侵删)- Magento 版本:记录下当前的 Magento 版本(2.4.5-p1)。
- PHP 版本:记录下当前使用的 PHP 版本。
- 扩展/模块:列出所有已安装的第三方扩展,特别注意是否有商业授权的扩展,它们可能需要在新服务器上重新授权。
- 主题:确认使用的是自定义主题还是官方主题。
- 服务器配置:记录下原服务器的关键配置,如 PHP 内存限制 (
memory_limit)、执行时间 (max_execution_time)、上传文件大小 (upload_max_filesize) 等。
-
目标环境规划:
- 服务器要求:根据 Magento 版本的要求,选择合适的服务器硬件(CPU, 内存)和操作系统。
- 软件栈:安装并配置好所需的软件:
- Web 服务器:Nginx 或 Apache。
- 数据库:MySQL 或 MariaDB(版本需兼容)。
- PHP:安装与 Magento 版本兼容的 PHP 版本,并配置好
php.ini中的各项参数。 - Redis:强烈建议安装并配置 Redis 用于缓存和 Session,能极大提升网站性能。
- Varnish:可选,用于全页面缓存,进一步提升性能。
- 域名:如果更换域名,提前购买好新域名,并确保 DNS 解析可以随时指向新服务器。
步骤 2:创建完整备份
这是最关键的一步!你需要备份以下所有内容:
-
数据库备份:
- 登录你的原服务器,使用命令行或 phpMyAdmin 导出整个数据库。
- 命令行示例:
# 格式: mysqldump -u [username] -p[password] [database_name] > backup.sql mysqldump -u root -p my_magento_db > /path/to/backup.sql
- 注意:如果你的数据库很大,导出可能需要一些时间,确保有足够的磁盘空间。
-
文件系统备份:
(图片来源网络,侵删)- 这包括 Magento 的所有文件、代码、媒体图片、上传文件等。
- 命令行示例 (使用 tar):
# 进入 Magento 安装根目录 cd /var/www/html # 打包整个项目,排除不必要的大文件(如 var/cache, var/page_cache) tar --exclude='var/cache/*' --exclude='var/page_cache/*' -czf magento_files_backup.tar.gz .
- 将生成的
backup.sql和magento_files_backup.tar.gz下载到你的本地电脑安全保存。
第二阶段:执行迁移
步骤 3:在新服务器上部署文件
- 将下载的
magento_files_backup.tar.gz上传到新服务器的 Web 根目录(/var/www/html/)。 - 在新服务器上解压文件:
cd /var/www/html tar -xzf magento_files_backup.tar.gz
- 设置正确的文件权限和所有者,这是 Magento 2 最容易出问题的地方之一。
# 假设 Web 服务器运行在 www-data 用户组下 sudo chown -R www-data:www-data /var/www/html sudo find /var/www/html -type f -exec chmod 644 {} \; # 所有文件设为 644 sudo find /var/www/html -type d -exec chmod 755 {} \; # 所有目录设为 755 # 特别设置关键目录的权限 sudo chmod -R 777 var/ pub/ generated/
步骤 4:导入数据库
- 在新服务器上创建一个新的数据库和数据库用户。
- 将之前导出的
backup.sql文件上传到新服务器。 - 使用命令行导入数据库:
# 格式: mysql -u [username] -p[password] [new_database_name] < backup.sql mysql -u root -p my_new_magento_db < /path/to/backup.sql
步骤 5:更新数据库配置信息
数据库中的配置信息(如数据库主机、用户名、密码)需要更新为与新服务器匹配。
-
使用
setup:config:set命令(推荐)- 登录到新服务器,切换到 Magento 文件所属的用户(如
www-data):sudo -u www-data /bin/bash
- 进入 Magento 根目录,运行以下命令:
bin/magento setup:config:set \ --db-host=localhost \ --db-name=my_new_magento_db \ --db-user=my_new_db_user \ --db-password=my_new_db_password
- 如果使用了 Redis,同样需要配置:
bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-server=127.0.0.1 --cache-backend-redis-db=0 bin/magento setup:config:set --page-cache=redis --page-cache-redis-server=127.0.0.1 --page-cache-redis-db=1
- 登录到新服务器,切换到 Magento 文件所属的用户(如
-
直接修改
env.php文件- 编辑
<你的Magento根目录>/app/etc/env.php文件。 - 找到
'db'和'cache'等配置段,将其中的值修改为新服务器的配置信息。
- 编辑
步骤 6:更新 URL 和域名(如果适用)
如果新域名与旧域名不同,必须更新数据库中存储的所有 URL。

-
使用
setup:store-config:set命令- 这个命令可以安全地更新 Base URL 和 Secure Base URL。
-
# 更新默认网站的 URL bin/magento setup:store-config:set \ --base-url="http://www.yournewdomain.com/" \ --base-url-secure="https://www.yournewdomain.com/"
如果有其他网站或商店视图,请一一更新
bin/magento setup:store-config:set \ --website="website_code" \ --store-view="store_view_code" \ --base-url="http://newstore.yournewdomain.com/" \ --base-url-secure="https://newstore.yournewdomain.com/"
-
数据库查询(备选方法,需谨慎)
- 如果上述命令不起作用,可以直接在数据库中搜索替换。强烈建议先备份新数据库!
-
UPDATE core_config_data SET value = 'http://www.yournewdomain.com/' WHERE path LIKE 'web/%/base_url'; UPDATE core_config_data SET value = 'https://www.yournewdomain.com/' WHERE path LIKE 'web/%/secure_base_url';
- 运行完查询后,需要清理配置缓存:
bin/magento cache:clean config
步骤 7:部署静态内容并升级
这是 Magento 2 迁移的“仪式感”步骤,确保所有前端文件和依赖项都正确生成。
-
进入维护模式:为了避免在部署过程中有用户访问,可以开启维护模式。
bin/magento maintenance:enable
-
部署静态内容:根据你的主题和语言,生成所需的 CSS, JS, 图片等文件。
# 示例:为默认主题和 en_US 语言部署 bin/magento setup:static-content:deploy -f en_US # 如果使用了其他主题,需要指定 # bin/magento setup:static-content:deploy -f en_US --area frontend --theme Vendor/theme
-
升级数据库和架构:即使版本不变,运行这个命令也能确保数据库结构与代码同步。
bin
