1. 目标:将本地或其他机房数据安全、可验证地迁移到自搭的韩国服务器,并建立备份与恢复流程。
2. 前提:具备目标服务器root或sudo权限、SSH访问、目标磁盘空间和网络带宽评估、确认法律与数据主权要求。
3. 工具清单:rsync、scp、sftp、rclone、mysqldump、pg_dump、LVM、tar、gzip、systemd/cron、openssl、iptables/ufw。
2.1 检查网络连通:在源端执行 ping 与 traceroute,确认到韩国IP的时延和丢包率。
2.2 配置防火墙:只开放必要端口(SSH 22 或自定义端口,HTTP/HTTPS),禁止不必要端口。
2.3 SSH硬化:在目标服务器修改 /etc/ssh/sshd_config 禁用 root 直接登录(PermitRootLogin no),使用公钥认证,设置登录端口与Fail2Ban。
3.1 小量一次性文件:使用 scp 或 sftp,示例:scp -P 2222 -r /data user@korea:/var/www。
3.2 大量或增量同步:使用 rsync,基础命令:rsync -avzP -e "ssh -p2222" /data/ user@korea:/data/。添加 --delete 同步删除,--checksum 校验差异。
3.3 云存储/跨区域:使用 rclone 支持多种后端(S3、GCS、FTP),可先上传到中转云再在韩国拉取。
4.1 冷备(停机窗口):停止应用写入或锁表,执行 mysqldump --single-transaction --routines --triggers -u root -p dbname > db.sql。
4.2 热备(线上):使用 Percona XtraBackup 或 mysqldump + binlog 增量,导出后传输并在目标执行 mysql -u root -p dbname < db.sql。
4.3 验证:对比表计数和校验和(SELECT COUNT(*)、CHECKSUM TABLE),确认字符集和时区设置一致。
5.1 导出:使用 pg_dump -U postgres -F c dbname > db.dump 或使用 pg_basebackup 做物理备份。
5.2 导入:在目标先创建同名用户与数据库,再使用 pg_restore -U postgres -d dbname db.dump。
5.3 事务一致性:若需持续写入,使用逻辑复制或设置流复制(streaming replication)以减少停机。
6.1 LVM 快照:对大盘使用 LVM,先创建快照 lvcreate --size 1G --snapshot -n snap /dev/vg/data,然后从快照 rsync,完成后 lvremove snap。
6.2 文件系统快照(btrfs、ZFS):利用文件系统快照减少停服窗口并快速回滚。
6.3 分片与并行传输:对大文件夹分片并行 rsync(使用 --files-from 切分清单),或使用 bbcp、scp -C 并限制带宽(--bwlimit)。
7.1 rsync 增量:首次全量,后续用 rsync 只传变化:rsync -avz --delete --checksum。
7.2 lsyncd:用于实时目录同步,配置 /etc/lsyncd/lsyncd.conf.lua,适用于低延迟同步。
7.3 双向冲突策略:若需要双向,采用 Unison 或配置应用层冲突解决机制,避免文件冲突。
8.1 备份脚本要点:包含日志记录、错误码检查、轮换(retain)、压缩(gzip/xz)、加密(openssl aes-256-cbc)。
8.2 示例 cron 入口:0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1。
8.3 轮换与清理:使用 find /backup -type f -mtime +30 -delete 删除旧备份;或使用 borg/duplicity 进行去重和加密备份。
9.1 SSH 公钥认证并使用强密钥,启用 SSH 代理转发谨慎使用。
9.2 传输中加密:rsync over SSH 自带加密,rclone 支持服务器端加密或客户端加密。
9.3 备份加密:使用 GPG/openssl 对备份文件加密,示例:openssl enc -aes-256-cbc -salt -in db.sql -out db.sql.enc。
10.1 恢复步骤:先确认备份完整性(校验sha256sum),将备份传至目标并解密/解压,按数据库或文件系统恢复顺序执行。
10.2 灾难恢复演练:定期在隔离环境做全流程恢复演练,记录耗时、失败情况并更新SOP(标准操作程序)。
10.3 验证:恢复后使用应用测试用例、数据校验脚本、流量验证确保服务正常。
11.1 权限问题:rsync/ssh 传输后检查文件属主与权限(chown/chmod),保留符号链接需加 -a。
11.2 字符集与编码:恢复数据库时确认字符集(utf8mb4 vs utf8),避免中文/emoji乱码。
11.3 性能问题:网络带宽或磁盘IO成为瓶颈时,采用压缩(-z)、分片或在目标本地先解压再移动。
12.1 合规:遵循数据主权、隐私法规范,敏感数据采用脱敏或加密处理后迁移。
12.2 审计日志:记录迁移时间、操作人、文件清单和校验和,保存至少备份保留期。
12.3 告警:将备份失败发送到邮件或监控系统(Prometheus + Alertmanager)。
13. 先检查数据库的字符集与排序规则(SHOW VARIABLES LIKE 'character_set_%'),若不符需用正确的字符集导出/导入或使用 iconv 转换;再检查系统时区与 MySQL/Postgres 的 time_zone 设置,统一为 UTC 或目标时区并重启服务后验证时间戳。
14. 建议在独立的测试环境做恢复验证:使用快照或临时实例导入备份,执行自动化校验脚本(校验表计数、关键业务查询、文件完整性sha256sum);同时保持最小数据隔离,验证应用流程而不影响生产。
15. 推荐组合:使用 borg/duplicity 做去重与加密备份,配合 rclone 同步到对象存储(S3兼容),定期利用 LVM/ZFS 快照减少停机,结合 Prometheus 监控与告警;并把SOP和演练纳入运维流程,做到可自动恢复与可审计。