Debian中如何进行数据迁移
小樊
44
2025-12-12 20:51:14
Debian 数据迁移实用指南
一、迁移方式总览与选择
- 文件级迁移:在同一台机器或跨机迁移目录/分区,常用工具为 rsync、tar,适合网站文件、用户数据、日志等。特点是灵活、可增量、对业务影响小。
- 整盘/系统迁移:用 Clonezilla 做磁盘/分区镜像克隆,或用 dd 做逐块复制,适合替换硬盘或整机迁移。注意 dd 会复制包括空扇区在内的全部数据,操作需谨慎。
- 数据库迁移:关系型数据库优先用各自的逻辑备份工具(如 pg_dump/pg_restore、mysqldump),异构源可用 pgloader 等加载器。
- 服务级迁移:如 LAMP/LEMP 场景,需同时迁移网站文件、数据库与虚拟主机/SSL 配置,并妥善切换 DNS。
- 目录/磁盘迁移:将 /home 或数据盘迁移到新盘或 LVM 卷,通过 /etc/fstab 与 UUID 更新实现平滑切换。
以上方法覆盖大多数迁移需求,选择时优先考虑“最小停机时间”“数据一致性”“回滚难度”。
二、通用文件级迁移步骤
- 准备与评估:梳理要迁移的目录/分区,确认磁盘空间与 inode 充足;尽量在业务低峰期执行,准备回滚方案。
- 首次全量复制(示例):
- rsync:rsync -aAX --info=progress2 /src/ /dst/(-a 归档、-A 保留 ACL、-X 保留扩展属性;结尾斜杠含义不同,/src/ 表示复制目录内容)
- tar:tar czf - /src | pv | (cd /dst && tar xzf -)
- 增量同步与校验:业务切换前再次执行 rsync 仅同步差异;用 du -sh、find . -type f -exec md5sum {} + 做容量与校验和对比。
- 切换与回滚:短暂停写→切换挂载点或更新 /etc/fstab(建议用 UUID)→验证→如有异常立即回滚到旧盘。
- 清理:确认新盘稳定后再回收旧盘空间。
以上流程适用于跨盘迁移、同盘重分区、以及到新服务器的目录迁移。
三、整盘或系统迁移
- 方案 A Clonezilla:在旧盘上以“device-image”模式做镜像,或“device-device”直连克隆到新盘;适合快速整机替换,操作界面化、容错高。
- 方案 B rsync 整盘:挂载新盘到临时目录(如 /mnt/newroot),用 rsync -aAX --info=progress2 / /mnt/newroot 做根分区全量复制;注意排除 /proc、/sys、/dev、/run 等虚拟文件系统。
- 方案 C dd 逐块复制:如 dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync;仅在同一容量或更大目标盘上使用,且务必核对盘符,避免覆盖源盘。
- 引导与验证:chroot 到新盘系统,执行 grub-install /dev/sdX 与 update-grub;重启后检查分区挂载、服务状态与日志。
整盘迁移的关键是“一致性与引导”,务必完成引导修复与多轮验证再切换生产流量。
四、数据库与服务迁移要点
- PostgreSQL:
- 备份:sudo -u postgres pg_dump -Fc -b -v -f backup.dump dbname(-Fc 自定义格式、-b 含大对象)
- 恢复:在目标库创建空库后,sudo -u postgres pg_restore -d dbname backup.dump;用 psql 执行查询校验数据量与抽样数据。
- MySQL/MariaDB:
- 备份:mysqldump -u root -p --single-transaction --routines --triggers dbname > db.sql
- 恢复:mysql -u root -p dbname < db.sql;检查字符集与存储引擎一致性。
- LAMP/LEMP 整站:
- 同步网站文件(如 /var/www/html),恢复数据库,迁移虚拟主机与 SSL 证书;
- 调整 DNS TTL 提前生效,切换后观察 /var/log/apache2/error.log、数据库错误日志,确保站点与后台任务正常。
数据库与服务迁移务必“先备份、再导入、后校验”,并保留回滚窗口。
五、将 home 或数据目录迁移到新盘或 LVM
- 挂载新盘并迁移:
- 分区与格式化(示例):parted /dev/sdc mklabel gpt mkpart primary ext4 0% 100%;mkfs.ext4 /dev/sdc1
- 挂载临时目录:mount /dev/sdc1 /mnt/newhome
- 同步数据:rsync -aAX /home/ /mnt/newhome/
- 切换挂载点:
- 备份并编辑 /etc/fstab,用 blkid 获取新盘 UUID,写入如:UUID=xxxx /home ext4 defaults,noatime 0 2
- 验证无误后重启或 mount -o remount /home;确认无误可清理旧盘数据。
- LVM 场景:将新盘创建为 PV→加入 VG→扩展 LV(如 lvextend -L +500G /dev/vg/home)→resize2fs/xfs_growfs 在线扩容。
该流程同样适用于将业务数据盘(如 /var/lib 下的服务数据)迁移到独立磁盘或 LVM,便于后续扩容与维护。