温馨提示×

如何迁移Debian的LAMP

小樊
46
2026-08-26 01:28:16
栏目: 智能运维

迁移 Debian 上的 LAMP(Linux + Apache + MySQL/MariaDB + PHP) 通常分为 同机迁移跨服务器迁移升级系统迁移。下面给你一套通用、稳妥、可执行的迁移方案,适用于大多数场景(如换服务器、重装系统、Debian 版本升级)。


一、迁移前准备

1️⃣ 确认当前环境

源服务器 执行:

lsb_release -a
apache2 -v
mysql --version
php -v
dpkg -l | grep php

记录:

  • Debian 版本(如 10 / 11 / 12)
  • Apache / MySQL / PHP 版本
  • 网站目录、数据库名、用户

二、迁移内容总览

组件 迁移内容
Apache 配置文件、虚拟主机
MySQL/MariaDB 数据库(逻辑导出)
PHP 版本、模块
网站文件 /var/www
SSL 证书 /etc/letsencrypt 或自定义
定时任务 crontab

三、迁移步骤(推荐方式)


✅ 1. 迁移 Apache

备份 Apache 配置

tar czvf apache-conf.tar.gz /etc/apache2

迁移到新服务器

scp apache-conf.tar.gz user@new-server:/tmp

新服务器解压

tar xzvf /tmp/apache-conf.tar.gz -C /

启用必要模块

a2enmod rewrite ssl php*

✅ 2. 迁移网站文件

备份

tar czvf www.tar.gz /var/www

迁移

scp www.tar.gz user@new-server:/tmp

解压

tar xzvf /tmp/www.tar.gz -C /

⚠️ 注意权限:

chown -R www-data:www-data /var/www

✅ 3. 迁移 MySQL / MariaDB(重点)

❌ 不推荐:直接拷贝 /var/lib/mysql

✅ 推荐:逻辑导出(mysqldump)

备份所有数据库

mysqldump -u root -p --all-databases > all-db.sql

迁移

scp all-db.sql user@new-server:/tmp

新服务器导入

mysql -u root -p < /tmp/all-db.sql

检查用户权限

SELECT user, host FROM mysql.user;

⚠️ 如果数据库版本不同,建议:

  • 先在新服务器安装 同版本数据库
  • 再升级(如 MySQL 5.7 → 8.0)

✅ 4. 迁移 PHP

安装相同版本

apt install php php-cli php-fpm php-mysql php-curl php-gd php-mbstring

迁移 php.ini(可选)

diff /etc/php/*/apache2/php.ini /etc/php/*/cli/php.ini

✅ 5. 迁移 SSL 证书(Let’s Encrypt)

备份

tar czvf letsencrypt.tar.gz /etc/letsencrypt

迁移

tar xzvf letsencrypt.tar.gz -C /

重新申请(推荐)

certbot renew

✅ 6. 迁移 Crontab(如有)

导出

crontab -l > crontab.bak

导入

crontab crontab.bak

四、迁移后检查

apachectl configtest
systemctl restart apache2
systemctl restart mysql

常见问题

问题 解决
403 Forbidden 目录权限 / SELinux
PHP 不解析 未安装 libapache2-mod-php
数据库连接失败 用户权限 / bind-address
网站打不开 Apache 虚拟主机未启用

五、不同场景建议

✅ 原地升级 Debian

apt update && apt full-upgrade

✅ 服务器迁移(最稳妥)

  • 新服务器 同版本 Debian
  • 同版本 LAMP
  • 再逐步升级

✅ 容器化(进阶)

  • 用 Docker 迁移 LAMP
  • 避免系统依赖问题

六、我可以帮你定制方案

你可以直接告诉我:

  1. Debian 版本(10 / 11 / 12)
  2. MySQL 还是 MariaDB
  3. 是否跨服务器
  4. 是否有 Docker / 面板(宝塔、ISPConfig)

我可以给你 一步一步的命令级迁移方案

0