温馨提示×

ubuntu lamp如何迁移数据

小樊
46
2026-01-02 21:07:49
栏目: 智能运维

Ubuntu LAMP 迁移数据实操指南

一、迁移总览与准备

  • 明确迁移范围:网站文件(如 /var/www/html)、数据库(MySQL/MariaDB)、Web 配置(Apache 虚拟主机与全局配置)、以及 PHP 配置(如 php.ini)。
  • 版本与兼容性:尽量保持 UbuntuMySQL/MariaDB、PHP 主次版本一致;如跨版本,先在测试环境验证。
  • 目标环境准备:安装同栈组件(如 tasksel install lamp-server 或分别安装 apache2、mysql-server、php 及常用扩展),并开放 防火墙/安全组22/80/443 端口。
  • 维护窗口与回滚:选择低峰时段,准备回滚方案(快照/备份、旧实例保留一段时间)。

二、数据库迁移(推荐逻辑导出导入)

  • 源库一致性导出(InnoDB 推荐一致性快照):
    • 方式 A(停机最小):短暂停写后导出
      sudo systemctl stop apache2
      mysqldump --single-transaction --quick --lock-tables=false --routines --triggers --events --all-databases > full-backup-$(date +%F).sql -u root -p
      sudo systemctl start apache2
    • 方式 B(维护窗口内停库停写):
      sudo systemctl stop apache2 mysql
      mysqldump --single-transaction --routines --triggers --events --all-databases > full-backup-$(date +%F).sql -u root -p
      sudo systemctl start mysql apache2
  • 传输到目标服务器:
    rsync -az full-backup-*.sql user@target_ip:~
  • 目标库恢复:
    mysql -u root -p < full-backup-*.sql
    mysqladmin flush-privileges -u root -p
  • 仅迁移单库/多库:将 –all-databases 替换为具体库名,或在目标库先建库再导入。
  • 大表/大数据量优化:分批导出(按库/表/时间条件)、压缩传输、必要时考虑物理拷贝或复制方案(见下文“进阶方案”)。

三、网站文件与配置迁移

  • 文件迁移(保持权限与时间戳):
    rsync -aAXv /var/www/html/ user@target_ip:~/document_root
  • 配置迁移:
    rsync -aAXv /etc/apache2/ user@target_ip:/etc/apache2/
    rsync -aAXv /etc/php/ user@target_ip:/etc/php/
  • 目标机落地与权限修正:
    sudo mv ~/document_root/* /var/www/html
    sudo chown -R www-data:www-data /var/www/html
    sudo chown -R root:root /etc/apache2 /etc/php
  • 虚拟主机启用:
    sudo a2dissite 000-default.conf
    sudo a2ensite your-site.conf
    sudo systemctl restart apache2
  • 权限要点:Web 内容属主应为 www-data:www-data;配置文件属主应为 root:root;必要时用 chmod/chown 修正。

四、进阶方案与注意事项

  • 零停机或近零停机:
    • 数据库层面可用 MySQL 主从复制 做实时同步,切换时短暂锁表后切流;或使用云厂商 DMS/CDC 工具做在线迁移。
  • 物理拷贝(仅同版本、停机):停库后拷贝 datadir,启动新实例;对 InnoDB 风险较高,优先逻辑导出导入。
  • 云数据库场景:如迁移至 RDS/Cloud SQL,使用托管导入工具或 mysqldump → 云存储 → 导入 的流程。
  • 域名与硬编码:迁移后用 IP 访问验证;若站点将域名硬编码在文件或数据库,需批量替换(如 WordPress WP-CLIDrupal Drush)。
  • 权限与 ACL:复杂权限请用 getfacl/setfacl 备份与恢复;跨机器迁移后复核 ACL 是否完整。
  • 验证清单:
    • 数据库:表数量、数据量、关键查询、用户权限;
    • 应用:登录、写入、上传、计划任务、错误日志;
    • Web:HTTP/HTTPS、重定向、虚拟主机、压缩与缓存头;
    • 安全:禁用默认站点、限制目录访问、更新密钥/盐值。

五、一键命令清单示例(可按需裁剪)

  • 源机备份与传输:
    sudo systemctl stop apache2
    mysqldump --single-transaction --quick --lock-tables=false --routines --triggers --events --all-databases > full-backup-$(date +%F).sql -u root -p
    sudo systemctl start apache2
    rsync -aAXv /var/www/html/ user@target_ip:~/document_root
    rsync -aAXv /etc/apache2/ user@target_ip:/etc/apache2/
    rsync -aAXv /etc/php/ user@target_ip:/etc/php/
    rsync -az full-backup-*.sql user@target_ip:~
  • 目标机恢复与启用:
    mysql -u root -p < full-backup-.sql
    mysqladmin flush-privileges -u root -p
    sudo mv ~/document_root/
    /var/www/html
    sudo chown -R www-data:www-data /var/www/html
    sudo chown -R root:root /etc/apache2 /etc/php
    sudo a2dissite 000-default.conf && sudo a2ensite your-site.conf
    sudo systemctl restart apache2

0