
一 问题背景服务器数据如何实现备份同步本文以服务器数据库数据同步到移动硬盘为例当然也可以同步给其他服务器基本思路是一致的。现状分析如下一台linux服务器作为数据库服务器数据在这个目录下/home/oracle/bak/db。现在我准备插一个移动硬盘到这个服务器上每天同步数据下载到硬盘里面的db目录下面。约束条件需要2个目录保证同步更新服务器关机重启之后也能同步更新第一步配置移动硬盘开机自动挂载如果服务器重启系统必须能够自动把移动硬盘挂载到指定的位置否则同步任务会失败。我们通过配置 /etc/fstab 文件来实现1 插入硬盘并找到它的UUID和文件系统类型使用 blkid 命令来查找。UUID是硬盘的唯一标识符比设备名如 /dev/sdb1更可靠因为设备名可能会变化blkid输出中有/dev/sdc1: UUID“7a7ca6e9-5836-42cb-9d7e-d6d2adb6a5ca” TYPE“exfat”显示了这个设备还有格式2 创建挂载点这个目录将是硬盘在系统中的“家”。我们创建 /mnt/backup_disk 作为挂载点mkdir-p/mnt/backup_disk3 编辑 /etc/fstab 文件vim/etc/fstab在文件末尾添加一行格式如下。请将 你的UUID、你的文件系统类型 替换成第一步中记下的信息。# file system mount point type options dump passUUID你的UUID /mnt/backup_disk 你的文件系统类型 defaults,nofail02nofail这个选项非常重要它保证即使插入硬盘失败服务器也能正常启动不会卡住。举例如果你的是 ext4 格式这行可能是 UUID1234-5678 /mnt/backup_disk ext4 defaultsnofail 0 2。4 测试挂载配置mount-a如果没有输出信息说明配置成功。你可以用 df -h | grep backup_disk 检查硬盘是否已经挂载上。如果失败继续尝试上面步骤。保证硬盘挂载成功。第二步编写同步脚本使用 rsync 命令它是 Linux 下最常用的同步工具特点是可以增量同步只传输变化的部分非常高效1 创建脚本文件sudovim/usr/local/bin/sync_oracle_backup.sh2 写入脚本内容确保源目录路径是你的数据目录目标目录是挂载点下的 db 文件#!/bin/bash# 源目录 (Oracle 备份目录)SOURCE_DIR/home/oracle/bak/db/# 目标目录 (移动硬盘上的目录)DEST_DIR/mnt/backup_disk/db/# 日志文件LOG_FILE/var/log/oracle_backup_sync.log# 检查移动硬盘是否挂载如果没有则尝试挂载if!mountpoint-q/mnt/backup_disk;thenecho$(date%Y-%m-%d %H:%M:%S)- 错误移动硬盘未挂载尝试挂载...$LOG_FILEmount/mnt/backup_disk# 再次检查if!mountpoint-q/mnt/backup_disk;thenecho$(date%Y-%m-%d %H:%M:%S)- 错误挂载失败退出同步。$LOG_FILEexit1fifi# 在移动硬盘上创建目标目录如果不存在mkdir-p$DEST_DIR# 执行 rsync 同步# -a 归档模式保留权限、时间戳等属性# -v 显示详细信息# --delete 删除目标端有但源端没有的文件使两边完全一致echo$(date%Y-%m-%d %H:%M:%S)- 开始同步...$LOG_FILErsync-av--delete$SOURCE_DIR$DEST_DIR$LOG_FILE21# 检查 rsync 命令是否成功if[$?-eq0];thenecho$(date%Y-%m-%d %H:%M:%S)- 同步成功完成。$LOG_FILEelseecho$(date%Y-%m-%d %H:%M:%S)- 同步过程中出现错误。$LOG_FILEfiecho----------------------------------------$LOG_FILE–delete 选项说明这个选项会让目标目录移动硬盘完全镜像源目录。也就是说如果源目录删除了某个文件下次同步时移动硬盘上的对应文件也会被删除。如果你不希望这样可以去掉这个参数。3 赋予脚本执行权限sudochmodx /usr/local/bin/sync_oracle_backup.sh4 手动执行一次测试sudo/usr/local/bin/sync_oracle_backup.sh然后检查日志 /var/log/oracle_backup_sync.log 或目标目录看看是否成功。手动执行需要一定的时间需要命令执行完后才能检查第三步设置定时任务 (cron)使用 cron 服务来让脚本每天自动运行1 编辑 root 用户的 crontabsudocrontab-e因为脚本中涉及到挂载等操作使用 root 权限执行最稳妥。2 添加定时任务在文件末尾添加一行指定执行时间。下面的例子是每天凌晨 200 执行脚本02* * * /usr/local/bin/sync_oracle_backup.sh时间说明0 2 * * * 代表每天200。你可以根据需要调整比如 0 */6 * * * 代表每6小时一次。保存并退出wqcron 会自动加载新任务