ubuntu lamp如何迁移数据
小樊
46
2026-01-02 21:07:49
Ubuntu LAMP 迁移数据实操指南
一、迁移总览与准备
- 明确迁移范围:网站文件(如 /var/www/html)、数据库(MySQL/MariaDB)、Web 配置(Apache 虚拟主机与全局配置)、以及 PHP 配置(如 php.ini)。
- 版本与兼容性:尽量保持 Ubuntu 与 MySQL/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-CLI、Drupal 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